Qt5学习笔记(控件)

上面的程序仅仅可以显示一个 大概 的界面,对其进行单击等操作,界面仅有一些简单的反应,对应的程序不能得知界面有什么改变(是否进行单击选择,文本框中是否有文字输入)

下面对程序进行完善。

T05Controls.pro

1 HEADERS += \
2     MyWidget.h
3 
4 SOURCES += \
5     MyWidget.cpp
6 
7 QT += widgets gui
8 
9 CONFIG += C++11

MyWidget.h

 1 #ifndef MYWIDGET_H
 2 #define MYWIDGET_H
 3 
 4 #include <QWidget>
 5 #include <QTextEdit>
 6 class MyWidget : public QWidget
 7 {
 8     Q_OBJECT
 9 public:
10     explicit MyWidget(QWidget *parent = nullptr);
11 
12     QTextEdit* _edit; //保存到成员变量里面
13 
14 signals:
15 
16 public slots:
17     void slotComboBoxIndexChanged(const QString&); //槽 函数
18 };
19 
20 #endif // MYWIDGET_H

MyWidget.cpp

  1 #include "MyWidget.h"
  2 #include <QApplication>
  3 #include <QLabel>  //display ststic text, or image
  4 #include <QPushButton>
  5 #include <QLineEdit>  //single line
  6 
  7 #include <QComboBox>
  8 #include <QCheckBox>
  9 #include <QRadioButton>
 10 #include <QTextEdit> //multi lines, rich text
 11 #include <QTextBrowser>  //readonly textedit
 12 #include <QGroupBox>
 13 #include <QSlider>   //模拟方式显示数值
 14 #include <QSpinBox>  //数字
 15 #include <QDateEdit>
 16 #include <QTimeEdit>
 17 #include <QDateTimeEdit>
 18 #include <QTabWidget> //不介绍,不算控件
 19 
 20 #include <QCompleter>
 21 #include <QVBoxLayout>
 22 #include <QDebug>
 23 #include <QHBoxLayout>
 24 #include <QLCDNumber>
 25 MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
 26 {
 27     QVBoxLayout* lay = new QVBoxLayout(this);  //this ,MyWidget,不用写this->setLayout();
 28     QLabel* label;
 29     QComboBox* combo;
 30     QPushButton* button;
 31     QRadioButton* radio;
 32     QTextEdit* edit;
 33     QGroupBox* group;
 34 
 35     lay->addWidget(label = new QLabel("<font color = red>Label</font>")); //支持html,静态文本
 36 
 37 
 38     lay->addWidget(button = new QPushButton("Button"));
 39     button->setStyleSheet("QPushButton {font:bold 16px; color:green}");
 40 
 41     lay->addWidget(radio = new QRadioButton("Radio"));
 42     radio->setStyleSheet("QRadioButton {font:bold 16px; color:blue}");
 43     connect(radio, &QRadioButton::clicked,[](bool v){
 44         qDebug() << v;
 45     });
 46 
 47 
 48     lay->addWidget(new QCheckBox("check box"));
 49 
 50 
 51     lay->addWidget(combo = new QComboBox());
 52     combo->addItem("Select item1");
 53     combo->addItem("Select item2");
 54     combo->addItem("nizhipeng");
 55     combo->addItem("jackson");
 56     combo->setEditable(true); //下拉框可编辑
 57     connect(combo, SIGNAL(currentIndexChanged(QString)), this, SLOT(slotComboBoxIndexChanged(QString)));
 58 
 59     combo->setCompleter(new QCompleter(QStringList() << "nizhipeng" << "jackson" ));
 60 
 61 
 62     lay->addWidget(edit = new QTextEdit);
 63     edit->setText("<table border=1><tr><th>head1</th><th>head2</th></tr>"
 64                   "<tr><td>value1</td><td>value2</td></tr>"
 65                   "<tr><td>value3</td><td>value4</td></tr>"
 66                   "</table><br>"
 67                   "<img src=../doge.jpg></img>");
 68     _edit = edit;
 69     connect(edit, &QTextEdit::textChanged, [&](){
 70        //(QTextEdit*) edit = this->sender();
 71        qDebug() << _edit->toPlainText();
 72     });
 73     //edit->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); 不写也有滚动条
 74     //edit->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//将水平滚动条取消
 75 
 76     lay->addWidget(group = new QGroupBox("Some items"));//lay->addWidget(group = new QGroupBox);
 77     QHBoxLayout* hBoxlay;
 78     group->setLayout(hBoxlay = new QHBoxLayout);
 79     hBoxlay->addWidget(new QPushButton("aaa"));
 80     hBoxlay->addWidget(new QPushButton("aaa"));
 81 
 82     QSlider* slider;
 83     QSpinBox* spinBox;
 84 
 85     lay->addWidget(slider = new QSlider(Qt::Horizontal));
 86     slider->setMaximum(100);
 87     slider->setMinimum(0);
 88     //slider->value();
 89 
 90     lay->addWidget(spinBox = new QSpinBox);
 91     spinBox->setMaximum(100);
 92     spinBox->setMinimum(0);
 93 
 94     connect(slider,SIGNAL(valueChanged(int)), spinBox, SLOT(setValue(int)));//互相影响
 95     connect(spinBox,SIGNAL(valueChanged(int)), slider, SLOT(setValue(int)));
 96 
 97 
 98     lay->addWidget(new QDateTimeEdit);
 99 
100     QLCDNumber* lcd;
101     lay->addWidget(lcd = new QLCDNumber(10));
102     lcd->display(112358);
103     //lcd->setMode(QLCDNumber::Hex); //16进制
104     lcd->setSegmentStyle(QLCDNumber::Flat);//数字更清晰
105 
106 }
107 
108 //槽函数
109 void MyWidget::slotComboBoxIndexChanged(const QString &str)
110 {
111     qDebug() << "slotComboBoxIndexChanged" << str;
112 }
113 
114 int main(int argc, char** argv)
115 {
116     QApplication app(argc, argv);
117 
118     MyWidget w;
119     w.show();
120 
121     return app.exec();
122 }

 

下面详细的介绍以上完整的程序:

1     QLabel* label;
2     lay->addWidget(label = new QLabel("<font color = red>Label</font>")); //支持html,静态文本

1 QPushButton* button;
2 lay->addWidget(button = new QPushButton("Button"));
3 button->setStyleSheet("QPushButton {font:bold 16px; color:green}");

如果不需要特殊设置颜色,只需要写成 lay->addWidget( new QPushButton("Button") );

1 QRadioButton* radio;
2 lay->addWidget(radio = new QRadioButton("Radio"));
3 radio->setStyleSheet("QRadioButton {font:bold 16px; color:blue}");//设置颜色
4 connect(radio, &QRadioButton::clicked,[](bool v){
5         qDebug() << v;
6 });

选择返回true,不选择返回false。

lay->addWidget(new QCheckBox("check box"));

仅仅显示

 1     QComboBox* combo;
 2     lay->addWidget(combo = new QComboBox());
 3     combo->addItem("Select item1");
 4     combo->addItem("Select item2");
 5     combo->addItem("nizhipeng");
 6     combo->addItem("jackson");
 7     combo->setEditable(true); //下拉框可编辑
 8     connect(combo, SIGNAL(currentIndexChanged(QString)), this,SLOT(slotComboBoxIndexChanged(QString)));
 9 
10     combo->setCompleter(new QCompleter(QStringList() << "nizhipeng" << "jackson" ));//补全提示

设置下拉框中内容,获得改变后的值,设置补全提示。

其中槽函数为:

1 //槽函数
2 void MyWidget::slotComboBoxIndexChanged(const QString &str)
3 {
4     qDebug() << "slotComboBoxIndexChanged" << str;
5 }
输出为 "slotComboBoxIndexChanged" << str;与上图一致。

根据下拉框中选择的内容,返回对应的内容。

 1     QTextEdit* edit;
 2     lay->addWidget(edit = new QTextEdit);
 3     edit->setText("<table border=1><tr><th>head1</th><th>head2</th></tr>"
 4                   "<tr><td>value1</td><td>value2</td></tr>"
 5                   "<tr><td>value3</td><td>value4</td></tr>"
 6                   "</table><br>"
 7                   "<img src=../doge.jpg></img>");
 8     _edit = edit;
 9     connect(edit, &QTextEdit::textChanged, [&](){
10        //(QTextEdit*) edit = this->sender();
11        qDebug() << _edit->toPlainText();
12     });

可以输入的文本框。

1     QGroupBox* group;
2     lay->addWidget(group = new QGroupBox("Some items"));//lay->addWidget(group = new QGroupBox);
3     QHBoxLayout* hBoxlay;
4     group->setLayout(hBoxlay = new QHBoxLayout);
5     hBoxlay->addWidget(new QPushButton("aaa"));
6     hBoxlay->addWidget(new QPushButton("aaa"));

 1     QSlider* slider;
 2     QSpinBox* spinBox;
 3 
 4     lay->addWidget(slider = new QSlider(Qt::Horizontal));
 5     slider->setMaximum(100);
 6     slider->setMinimum(0);
 7     //slider->value();
 8 
 9     lay->addWidget(spinBox = new QSpinBox);
10     spinBox->setMaximum(100);
11     spinBox->setMinimum(0);
12     
13     connect(slider,SIGNAL(valueChanged(int)), spinBox, SLOT(setValue(int)));//互相影响
14     connect(spinBox,SIGNAL(valueChanged(int)), slider, SLOT(setValue(int)));

上下的值互相对应,一个改变另一个也改变。

lay->addWidget(new QDateTimeEdit);

1     QLCDNumber* lcd;
2     lay->addWidget(lcd = new QLCDNumber(10));
3     lcd->display(112358);
4     //lcd->setMode(QLCDNumber::Hex); //16进制
5     lcd->setSegmentStyle(QLCDNumber::Flat);//数字更清晰

猜你喜欢

转载自www.cnblogs.com/112358nizhipeng/p/9291843.html