网站首页 > 博客文章 正文
今日头条/西瓜视频/抖音短视频 同名:正点原子
感谢各位的关注和支持,你们的关注和支持是正点原子无限前进的动力。
第七章《Qt控件 2》
由于本章内容较多,所以第七章《Qt控件》将会分为几个部分进行内容的发布,更多文章内容请持续关注今日头条正点原子官方账号。
7.2.1 QComboBox
7.2.1.1控件简介
QComboBox类提供了Qt下拉组合框的组件。
7.2.1.2用法示例
例10_qcombobox,选择省份(难度:简单),通过点击下拉按钮的项,选择其中一项,然后打印出当前选择项的内容。
在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。
在头文件“mainwindow.h”具体代码如下。
mainwindow.h编程后的代码
1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3
4 #include <QMainWindow>
5 /* 引入QDialogButtonBox */
6 #include <QDialogButtonBox>
7 /* 引入QPuhsButton */
8 #include <QPushButton>
9
10 class MainWindow : public QMainWindow
11 {
12 Q_OBJECT
13
14 public:
15 MainWindow(QWidget *parent = nullptr);
16 ~MainWindow();
17
18 private:
19 /* 声明一个QDialogButtonBox对象 */
20 QDialogButtonBox *dialogButtonBox;
21
22 /* 声明一个QDialogButtonBox对象 */
23 QPushButton *pushButton;
24
25 private slots:
26 /* 声明信号槽,带QAbstractButton *参数,用于判断点击了哪个按钮 */
27 void dialogButtonBoxClicked(QAbstractButton *);
28
29 };
30 #endif // MAINWINDOW_H
第18行,声明一个QDialogButtonBox对象。
在源文件“mainwindow.cpp”具体代码如下。
mainwindow.cpp编程后的代码
1 #include "mainwindow.h"
2 /* 引入QDebug */
3 #include <QDebug>
4
5 MainWindow::MainWindow(QWidget *parent)
6 : QMainWindow(parent)
7 {
8 /* 设置主窗体的显示位置与大小 */
9 this->setGeometry(0, 0, 800, 480);
10
11 /* 实例化对象 */
12 comboBox = new QComboBox(this);
13
14 /* 设置comboBox的显示位置与大小 */
15 comboBox->setGeometry(300, 200, 150, 30);
16
17 /* 添加项,我们添加三个省份,作为comboBox的三个选项 */
18 comboBox->addItem("广东(默认)");
19 comboBox->addItem("湖南");
20 comboBox->addItem("四川");
21
22 /* 信号槽连接 */
23 connect(comboBox, SIGNAL(currentIndexChanged(int)), this,
24 SLOT(comboBoxIndexChanged(int)));
25 }
26
27 MainWindow::~MainWindow()
28 {
29 }
30
31 void MainWindow::comboBoxIndexChanged(int index)
32 {
33 /* 打印出选择的省份 */
34 qDebug()<<"您选择的省份是"<< comboBox->itemText(index)<<endl;
35 }
第18至20行,添加Item,也就是项。
第30至34行,当点击下拉列表改变选择的省份就会触发currentIndexChanged(int)这个信号,就会相应打印项的省份名称。
在源文件“main.cpp”具体代码如下。由新建项目时生成,无改动。
main.cpp编程后的代码
1 #include "mainwindow.h"
2
3 #include <QApplication>
4
5 int main(int argc, char *argv[])
6 {
7 QApplication a(argc, argv);
8 MainWindow w;
9 w.show();
10 return a.exec();
11 }
7.2.1.3运行效果
程序编译运行的结果如下,当点击下拉选择框选择省份时,槽函数将打印出您选择的省份。
点击选择“湖南”,则打印出“您选择的省份是湖南”。
QComboBox我们常会在一些需要下拉列表选择的项目中用到。比如QQ登录如果有多个帐号选择就需要这个QComboBox。
7.2.2QFontComboBox
7.2.2.1控件简介
QFontComboBox类提供了下拉选择字体系列的组合框小部件。
7.2.2.2用法示例
例11_qfontcombobox,字体选择(难度:简单),通过点击下拉按钮的项,选择其中一项,然后打印出当前选择项的内容。
在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。
在头文件“mainwindow.h”具体代码如下。
mainwindow.h编程后的代码
1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3
4 #include <QMainWindow>
5 /* 引入QFontComboBox */
6 #include <QFontComboBox>
7 /* 引入QLable */
8 #include <QLabel>
9
10 class MainWindow : public QMainWindow
11 {
12 Q_OBJECT
13
14 public:
15 MainWindow(QWidget *parent = nullptr);
16 ~MainWindow();
17
18 private:
19 /* 声明一个QFontComboBox对象 */
20 QFontComboBox *fontComboBox;
21 /* 声明一个Label对象,用于显示当前字体变化 */
22 QLabel *label;
23
24 private slots:
25 /* 声明QFontComboBox对象使用的槽函数 */
26 void fontComboBoxFontChanged(QFont);
27
28 };
29 #endif // MAINWINDOW_H
第20行,声明一个QFontComboBox对象。
在源文件“mainwindow.cpp”具体代码如下。
mainwindow.cpp编程后的代码
1 #include "mainwindow.h"
2
3 MainWindow::MainWindow(QWidget *parent)
4 : QMainWindow(parent)
5 {
6 /* 设置主窗体的显示位置和大小 */
7 this->setGeometry(0, 0, 800, 480);
8
9 /* 实例化对象 */
10 fontComboBox = new QFontComboBox(this);
11 label = new QLabel(this);
12
13 /* 设置显示的位置与大小 */
14 fontComboBox->setGeometry(280, 200, 200, 30);
15 label->setGeometry(280, 250, 300, 50);
16
17 /* 信号与槽连接 */
18 connect(fontComboBox, SIGNAL(currentFontChanged(QFont)), this,
19 SLOT(fontComboBoxFontChanged(QFont)));
20 }
21
22 MainWindow::~MainWindow()
23 {
24 }
25
26 /* 槽函数实现 */
27 void MainWindow::fontComboBoxFontChanged(QFont font)
28 {
29 /* 将label里的文本内容设置为所选择的字体 */
30 label->setFont(font);
31
32 /* 定义一个字符串接收当前项的字体 */
33 QString str = "用此标签显示字体效果\n设置的字体为:" +
34 fontComboBox->itemText(fontComboBox->currentIndex());
35
36 /* 将字符串的内容作为label的显示内容 */
37 label->setText(str);
38 }
第27至37行,当选择的字体改变时,槽函数就会设置label的字体,并打印当前字体的名称。
在源文件“main.cpp”具体代码如下。由新建项目时生成,无改动。
main.cpp编程后的代码
1 #include "mainwindow.h"
2
3 #include <QApplication>
4
5 int main(int argc, char *argv[])
6 {
7 QApplication a(argc, argv);
8 MainWindow w;
9 w.show();
10 return a.exec();
11 }
7.2.2.3运行效果
程序编译运行的结果如下,当点击FontCOmboBox字体组合框选择字体后,Label标签显示的字体将改变为当前所选择的字体。(注意Ubuntu与Windows的字体不一样,所以显示的效果有可能不一样,下图为Ubuntu的字体显示效果)
在手机,电脑一些软件都有设置字体的功能,由用户自行选择,所以我们这个QFontComboBox就可以应用于此种场合。当然也有设置字体的大小,颜色等,这些由我们自由设计。
7.2.3QLineEdit
7.2.3.1控件简介
QLineEdit小部件是一个单行文本编辑器。行编辑允许用户使用一组有用的编辑函数输入和编辑一行纯文本。包括撤消和重做、剪切和粘贴以及拖放。通过更改行编辑的echoMode(),它还可以用作“只写”字段,用于输入如密码等。
7.2.3.2用法示例
例12_qlineedit,单行输入框(难度:简单),通过点击下拉按钮的项,选择其中一项,然后打印出当前选择项的内容。
在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。
在头文件“mainwindow.h”具体代码如下。像引入头文件,设置主窗体大小位置和实例化对象这种注释我们慢慢淡化,不再写详细注释了。读者看了前面的对这种设置已经很清楚了。
mainwindow.h编程后的代码
1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3
4 #include <QMainWindow>
5 #include <QLineEdit>
6 #include <QPushButton>
7 #include <QLabel>
8
9 class MainWindow : public QMainWindow
10 {
11 Q_OBJECT
12
13 public:
14 MainWindow(QWidget *parent = nullptr);
15 ~MainWindow();
16 private:
17 /* 声明一个QLineEdit对象 */
18 QLineEdit *lineEdit;
19
20 /* 声明一个QPushButton对象 */
21 QPushButton *pushButton;
22
23 /* 声明一个QLabel对象 */
24 QLabel *label;
25
26 private slots:
27 /* 声明一个槽函数,响应pushButton的clicked事件 */
28 void pushButtonClicked();
29 };
30 #endif // MAINWINDOW_H
在源文件“mainwindow.cpp”具体代码如下。
mainwindow.cpp编程后的代码
1 #include "mainwindow.h"
2
3 MainWindow::MainWindow(QWidget *parent)
4 : QMainWindow(parent)
5 {
6 this->setGeometry(0, 0, 800, 480);
7
8 lineEdit = new QLineEdit(this);
9 lineEdit->setGeometry(280, 200, 200, 20);
10
11 pushButton = new QPushButton(this);
12 pushButton->setGeometry(500, 200, 50, 20);
13 pushButton->setText("确认");
14
15 label = new QLabel(this);
16 label->setGeometry(280, 250, 400, 20);
17 label->setText("您输入的内容是:");
18
19 /* 信号槽连接 */
20 connect(pushButton,SIGNAL(clicked()), this,
21 SLOT(pushButtonClicked()));
22 }
23
24 MainWindow::~MainWindow()
25 {
26 }
27
28 void MainWindow::pushButtonClicked()
29 {
30 /* 字符串变量str */
31 QString str;
32
33 str = "您输入的内容是:";
34 str += lineEdit->text();
35
36 /* 设置label里的文本显示内容 */
37 label->setText(str);
38 /* 在点击了确认键之后清空lineEdit单行输入框 */
39 lineEdit->clear();
40 }
第28至40行,当我们在单选输入框里输入完成后,将输入的内容设置为在label的文本内容。
在源文件“main.cpp”具体代码如下。由新建项目时生成,无改动。
main.cpp编程后的代码
1 #include "mainwindow.h"
2
3 #include <QApplication>
4
5 int main(int argc, char *argv[])
6 {
7 QApplication a(argc, argv);
8 MainWindow w;
9 w.show();
10 return a.exec();
11 }
7.2.3.3运行效果
程序编译运行的结果如下,当在QLineEdit单行输入框内输入文本内容后,单击QPushButton确认按钮后,QLabel的文本内容将显示您所输入的内容。然后QLineEdit将清空,可再次输入。
QLineEdit的简单使用如上,编者也是简单的介绍了它的用法。要想写好一点的例子,需要我们主动思考,比如,做个将这个QLineEdit应用到密码登录窗口上,输入密码,然后判断这个密码是否与预设的密码一样才解锁等。
7.2.4QTextEdit
7.2.4.1控件简介
QTextEdit类提供了一个查看器/编辑器小部件。
7.2.4.2用法示例
例13_qtextedit文本编辑框(难度:简单),用一个QTextEdit来演示文本的输入,用两个QPushButton来模拟文本编辑的全选与清除。在QTextEdit里也可用键盘的快捷键(如Ctrl+A)来完成全选,复制,粘贴等操作。Qt提供了全选,复制粘贴等这一类的函数方便用户操作,下面用简单的实例来演示。
在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。
在头文件“mainwindow.h”具体代码如下。
mainwindow.h编程后的代码
1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3 #include <QTextEdit>
4 #include <QPushButton>
5
6 #include <QMainWindow>
7
8 class MainWindow : public QMainWindow
9 {
10 Q_OBJECT
11
12 public:
13 MainWindow(QWidget *parent = nullptr);
14 ~MainWindow();
15
16 private:
17 /* 声明一个QTextEdit对象 */
18 QTextEdit *textEdit;
19
20 /* 声明两个QPushButton对象 */
21 QPushButton *pushButtonSelectAll;
22 QPushButton *pushButtonClearAll;
23
24 private slots:
25 /* 声明两个槽函数,响应按钮点击响应的事件 */
26 void pushButtonSelectAllClicked();
27 void pushButtonClearAllClicked();
28
29 };
30 #endif // MAINWINDOW_H
在源文件“mainwindow.cpp”具体代码如下。
mainwindow.cpp编程后的代码
1 #include "mainwindow.h"
2
3 MainWindow::MainWindow(QWidget *parent)
4 : QMainWindow(parent)
5 {
6 /* 设置主窗体显示的位置和大小 */
7 this->setGeometry(0, 0, 800, 480);
8
9 /* 实例和对象,设置位置和显示大小 */
10 textEdit = new QTextEdit(this);
11 textEdit->setGeometry(0, 0, 800, 400);
12
13 /* 实例和对象,设置位置和显示大小,设置文本 */
14 pushButtonSelectAll = new QPushButton(this);
15 pushButtonSelectAll->setGeometry(200, 420, 50, 20);
16 pushButtonSelectAll->setText("全选");
17
18 /* 实例和对象,设置位置和显示大小,设置文本 */
19 pushButtonClearAll = new QPushButton(this);
20 pushButtonClearAll->setGeometry(500, 420, 50, 20);
21 pushButtonClearAll->setText("清除");
22
23 /* 信号槽连接 */
24 connect(pushButtonSelectAll, SIGNAL(clicked()), this,
25 SLOT(pushButtonSelectAllClicked()));
26 connect(pushButtonClearAll, SIGNAL(clicked()), this,
27 SLOT(pushButtonClearAllClicked()));
28
29 }
30
31 MainWindow::~MainWindow()
32 {
33 }
34
35 void MainWindow::pushButtonSelectAllClicked()
36 {
37 /* 设置焦点为textEdit */
38 textEdit->setFocus();
39 /* 判断文本编辑框内容是否为空,不为空则全选 */
40 if(!textEdit->toPlainText().isEmpty()){
41 /* 全选 */
42 textEdit->selectAll();
43 }
44 }
45
46 void MainWindow::pushButtonClearAllClicked()
47 {
48 /* 清空textEdit里的文本内容 */
49 textEdit->clear();
50 }
51
第35至49行,当我们在文本输入框里输入完成后,当点击全选按钮后,需要设置焦点到textEdit上,否则将不能设置全选。
在源文件“main.cpp”具体代码如下。由新建项目时生成,无改动。
main.cpp编程后的代码
1 #include "mainwindow.h"
2
3 #include <QApplication>
4
5 int main(int argc, char *argv[])
6 {
7 QApplication a(argc, argv);
8 MainWindow w;
9 w.show();
10 return a.exec();
11 }
7.2.4.3运行效果
程序编译运行的结果如下,在编辑框里输入文字后,点击按钮全选,点击清除则清除编辑框内的全部内容。如下图为点击全选的效果。
7.2.5QPlainTextEdit
7.2.5.1控件简介
QPlainTextEdit类提供了一个用于编辑和显示纯文本的小部件,常用于显示多行文本或简单文本。
7.2.5.2用法示例
例14_qplaintextedit文本浏览编辑器(难度:简单),用一个QPlainTextEdit来读取本当前工程里的一个文件,并用一个RadioButton里将QPlainTextEdit设为只读。
在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。
在头文件“mainwindow.h”具体代码如下。
mainwindow.h编程后的代码
1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3
4 #include <QPlainTextEdit>
5 #include <QRadioButton>
6
7 #include <QMainWindow>
8
9 class MainWindow : public QMainWindow
10 {
11 Q_OBJECT
12
13 public:
14 MainWindow(QWidget *parent = nullptr);
15 ~MainWindow();
16
17 private:
18 /* 声明对象 */
19 QPlainTextEdit *plainTextEdit;
20 QRadioButton *radioButton;
21
22 private slots:
23 /* 槽函数 */
24 void radioButtonClicked();
25
26 };
27 #endif // MAINWINDOW_H
在源文件“mainwindow.cpp”具体代码如下。
mainwindow.cpp编程后的代码
1 #include "mainwindow.h"
2 #include <QDir>
3 #include <QTextStream>
4 #include <QCoreApplication>
5
6 MainWindow::MainWindow(QWidget *parent)
7 : QMainWindow(parent)
8 {
9 /* 设置当前程序的工作目录为可执行程序的工作目录 */
10 QDir::setCurrent(QCoreApplication::applicationDirPath());
11
12 this->setGeometry(0, 0, 800, 480);
13
14 plainTextEdit = new QPlainTextEdit(this);
15 plainTextEdit->setGeometry(0, 50, 800, 430);
16
17 radioButton = new QRadioButton(this);
18 radioButton->setGeometry(650, 20, 100, 20);
19 radioButton->setText("只读模式");
20
21 /* 打开可执行程序目录里的moc_mainwindow.cpp,注意如果是Windows下
22 moc_mainwindow.cpp并不在当前目录,而在上一级目录"../moc_mainwindow.cpp"*/
23 QFile file("moc_mainwindow.cpp");
24
25 /* 以只读模式打开,但是可以在plainTextEdit里编辑 */
26 file.open((QFile::ReadOnly | QFile::Text));
27
28 /* 加载到文件流 */
29 QTextStream in(&file);
30
31 /* 从文本流中读取全部 */
32 plainTextEdit->insertPlainText(in.readAll());
33
34 /* 信号槽连接 */
35 connect(radioButton, SIGNAL(clicked()), this,
36 SLOT(radioButtonClicked()));
37
38 }
39
40 MainWindow::~MainWindow()
41 {
42 }
43
44 void MainWindow::radioButtonClicked()
45 {
46 /* 检查radioButton是否选中 */
47 if(radioButton->isChecked()) {
48 /* 设置为只读模式 */
49 plainTextEdit->setReadOnly(true);
50 } else {
51 /* 设置为非只读模式 */
52 plainTextEdit->setReadOnly(false);
53 }
54 }
第44和54行,检查radioButton是否选中。
在源文件“main.cpp”具体代码如下。由新建项目时生成,无改动。
main.cpp编程后的代码
1 #include "mainwindow.h"
2
3 #include <QApplication>
4
5 int main(int argc, char *argv[])
6 {
7 QApplication a(argc, argv);
8 MainWindow w;
9 w.show();
10 return a.exec();
11 }
7.2.5.3运行效果
程序编译运行的结果如下,当程序正常运行后会打开程序当前路径下的” moc_mainwindow.cpp”文件,(注意在Windows下moc_mainwindow.cpp应该写成”../ moc_mainwindow.cpp”),且在QPlainTextEdit编辑框下是可编辑的,当选中程序界面上的只读模式时,QPlainTextEdit编辑框就不可以再编辑。相反可以取消只读模式则可以再编辑。
有了QTextEdit,为什么还有QPlainTextEdit?QPlainTextEdit 可以理解为 QTextEdit的低配版。QPlainTextEdit支持纯文本显示,QTextEdit支持富文本(支持多种格式,比如插入图片,链接等)显示。就是多一个样式。QPlainTextEdit显示的效率比QTextEdit高,如果需要显示大量文字,尤其是需要滚动条来回滚动的时候,QPlainTextEdit要好很多。
7.2.6QSpinBox
7.2.6.1控件简介
QSpinBox类提供了一个微调框小部件。
7.2.6.2用法示例
例15_qspinbox窗口背景不透明调节器(难度:简单),用一个QSpinBox来调节程序窗体的整体不透明度。
在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。
在头文件“mainwindow.h”具体代码如下。
mainwindow.h编程后的代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QSpinBox>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
/* 声明一个QSpinBox对象 */
QSpinBox *spinBox;
private slots:
/* 槽函数 */
void spinBoxValueChanged(int);
};
#endif // MAINWINDOW_H
在源文件“mainwindow.cpp”具体代码如下。
mainwindow.cpp编程后的代码
1 #include "mainwindow.h"
2
3 MainWindow::MainWindow(QWidget *parent)
4 : QMainWindow(parent)
5 {
6 this->setGeometry(0, 0, 800, 480);
7
8 /* 设置主窗口背景颜色,rgb颜色标准,a代表不透明度(0~100)*/
9 this->setStyleSheet("QMainWindow{background-color: "
10 "rgba(100, 100, 100, 100%) }");
11
12 spinBox = new QSpinBox(this);
13 spinBox->setGeometry(350, 200, 150, 30);
14
15 /* 设置范围0~100 */
16 spinBox->setRange(0, 100);
17
18 /* 设置步长为10 */
19 spinBox->setSingleStep(10);
20
21 /* 设置初始值为100 */
22 spinBox->setValue(100);
23
24 /* 设置后缀 */
25 spinBox->setSuffix("%不透明度");
26
27 /* 信号槽连接 */
28 connect(spinBox,SIGNAL(valueChanged(int)), this,
29 SLOT(spinBoxValueChanged(int)));
30 }
31
32 MainWindow::~MainWindow()
33 {
34 }
35
36 void MainWindow::spinBoxValueChanged(int opacity)
37 {
38 /* 转换为double数据类型 */
39 double dobleopacity = (double)opacity / 100;
40
41 /* 设置窗体不透明度,范围是0.0~1.0。1则为不透明,0为全透明 */
42 this->setWindowOpacity(dobleopacity);
43 }
7.2.6.3运行效果
程序编译运行的结果如下,程序初始化界面时是全不透明,不透明度值为100%,当点击向下调节SpinBox后,整个窗体的不透明将会变小。当不透明度地值变小时,窗口将透明化。
7.2.7QDoubleSpinBox
7.2.7.1控件简介
QDoubleSpinBox类提供了一个用于处理浮点值微调框小部件。与QSpinBox作用基本一样,与QSpinBox不同的是,QDoubleSpinBox类处理的是浮点值数据。
7.2.7.2用法示例
例16_qdoublespinbox窗口大小调节器(难度:简单),用一个QDoubleSpinBox来调节程序窗口的整体大小。
在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。
在头文件“mainwindow.h”具体代码如下。
mainwindow.h编程后的代码
1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3
4 #include <QMainWindow>
5 #include <QDoubleSpinBox>
6
7 class MainWindow : public QMainWindow
8 {
9 Q_OBJECT
10
11 public:
12 MainWindow(QWidget *parent = nullptr);
13 ~MainWindow();
14
15 private:
16 /* 声明一个QDoubleSpinBox对象 */
17 QDoubleSpinBox *doubleSpinBox;
18
19 private slots:
20 /* 槽函数 */
21 void doubleSpinBoxValueChanged(double);
22
23 };
24 #endif // MAINWINDOW_H
在源文件“mainwindow.cpp”具体代码如下。
mainwindow.cpp编程后的代码
1 #include "mainwindow.h"
2
3 MainWindow::MainWindow(QWidget *parent)
4 : QMainWindow(parent)
5 {
6 this->setGeometry(0, 0, 800, 480);
7
8 /* 实例化和设置显示的位置与大小 */
9 doubleSpinBox = new QDoubleSpinBox(this);
10 doubleSpinBox->setGeometry((this->width() - 200) / 2,
11 (this->height() - 30) / 2,
12 200, 30);
13 /* 设置前缀 */
14 doubleSpinBox->setPrefix("窗口大小");
15
16 /* 设置后缀 */
17 doubleSpinBox->setSuffix("%");
18
19 /* 设置范围 */
20 doubleSpinBox->setRange(50.00, 100.00);
21
22 /* 设置初始值 */
23 doubleSpinBox->setValue(100.00);
24
25 /* 设置步长 */
26 doubleSpinBox->setSingleStep(0.1);
27
28 /* 信号槽连接 */
29 connect(doubleSpinBox, SIGNAL(valueChanged(double)),
30 SLOT(doubleSpinBoxValueChanged(double)));
31
32 }
33
34 MainWindow::~MainWindow()
35 {
36 }
37
38 void MainWindow::doubleSpinBoxValueChanged(double value)
39 {
40 /* 重新计算窗口的宽与高 */
41 int w = 800 * value / 100;
42 int h = 480 * value / 100;
43
44 /* 重新设置窗口的宽与高 */
45 this->setGeometry(0, 0, w, h);
46
47 /* 重新设置doubleSpinBox的显示位置 */
48 doubleSpinBox->setGeometry((this->width() - 200) / 2,
49 (this->height() - 30) / 2,
50 200, 30);
51
52 }
第35至49行,重新设置主窗体的宽高和doubleSpinBox的显示位置。
在源文件“main.cpp”具体代码如下。由新建项目时生成,无改动。
main.cpp编程后的代码
1 #include "mainwindow.h"
2
3 #include <QApplication>
4
5 int main(int argc, char *argv[])
6 {
7 QApplication a(argc, argv);
8 MainWindow w;
9 w.show();
10 return a.exec();
11 }
7.2.7.3运行效果
程序编译运行的结果如下,程序初始化界面窗口大小值为100%,当点击向下调节QDoubleSpinBox时,整个窗体将按QDoubleSpinBox里数值的比例缩小,最小为50.00%,相反当点击向上调节QDoubleSpinBox时,窗口大小将整体变大,最大为100.00%。
7.2.8 QTimeEdit
7.2.8.1控件简介
QTimeEdit类提供一个基于QDateTimeEdit类编辑时间的小部件。例在7.2.10小节。
7.2.9QDateEdit
7.2.9.1控件简介
QDateEdit类提供一个基于QDateTimeEdit类编辑时间的小部件。例在7.2.10小节。
7.2.10QDateTimeEdit
7.2.10.1控件简介
从名字可知QDateTimeEdit类提供了一个用于编辑日期和时间的小部件。QDateTimeEdit允许用户使用键盘或箭头键编辑日期,以增加或减少日期和时间值。箭头键可用于在QDateTimeEdit框中从一个区域移动到另一个区域。实际上是QDateTimeEdit和QDateEdit的组合。
7.2.10.2用法示例
例17_qdatetimeedit时间日期展示(难度简单),使用一个QDateTimeEdit,一个QTimeEdit以及一个QDateEdit,传入当前系统时间与日期,展示简单的日期时间控件使用方法。
在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。
在头文件“mainwindow.h”具体代码如下。
mainwindow.h编程后的代码
1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3
4 #include <QMainWindow>
5 #include <QDateTimeEdit>
6 #include <QTimeEdit>
7 #include <QDateEdit>
8
9 class MainWindow : public QMainWindow
10 {
11 Q_OBJECT
12
13 public:
14 MainWindow(QWidget *parent = nullptr);
15 ~MainWindow();
16
17 private:
18 /* 声明对象 */
19 QDateTimeEdit *dateTimeEdit;
20 QTimeEdit *timeEdit;
21 QDateEdit *dateEdit;
22 };
23 #endif // MAINWINDOW_H
在源文件“mainwindow.cpp”具体代码如下。
mainwindow.cpp编程后的代码
1 #include "mainwindow.h"
2
3 MainWindow::MainWindow(QWidget *parent)
4 : QMainWindow(parent)
5 {
6 /* 设置位置与大小 */
7 this->setGeometry(0, 0, 800, 480);
8
9 /*实例化对象,传入当前日期与时间*/
10 dateTimeEdit = new QDateTimeEdit(
QDateTime::currentDateTime(),this);
11 dateTimeEdit->setGeometry(300, 200, 200, 30);
12 /* 弹出日期控件与否 */
13 //dateTimeEdit->setCalendarPopup(true);
14
15 /* 实例化对象,传入当前时间 */
16 timeEdit = new QTimeEdit(QTime::currentTime(),this);
17 timeEdit->setGeometry(300, 240, 200, 30);
18
19 /* 实例化对象,传入当前日期 */
20 dateEdit = new QDateEdit(QDate::currentDate(),this);
21 dateEdit->setGeometry(300, 280, 200, 30);
22 }
23
24 MainWindow::~MainWindow()
25 {
26 }
在源文件“main.cpp”具体代码如下。由新建项目时生成,无改动。
main.cpp编程后的代码
1 #include "mainwindow.h"
2
3 #include <QApplication>
4
5 int main(int argc, char *argv[])
6 {
7 QApplication a(argc, argv);
8 MainWindow w;
9 w.show();
10 return a.exec();
11 }
7.2.10.3运行效果
程序编译运行的结果如下,当程序初始化时,分别显示系统当前的时间与日期(注意,windows下Qt 程序显示的格式可能不一样,下图为linux下的Qt程序日期显示格式)。
7.2.11QDial
7.2.11.1控件简介
QDial类提供了一个圆形范围控制(如速度计或电位器)。QDial用于当用户需要在可编程定义的范围内控制一个值,并且该范围要么是环绕的(例如,从0到359度测量的角度),要么对话框布局需要一个正方形小部件。由于QDial从QAbstractSlider继承,因此拨号的行为与滑块类似。 当wrapping()为false(默认设置)时,滑块和刻度盘之间没有真正的区别。 它们共享相同的信号,插槽和成员功能。 您使用哪一个取决于您的用户期望和应用程序类型。
7.2.11.2用法示例
例18_qdial车速表(难度:简单),使用一个QDial,以一个QLabel,演示QDial的用法。当程序初始化界面后,拖动滑块的位置,label则会显示dial的值。
在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。
在头文件“mainwindow.h”具体代码如下。
mainwindow.h编程后的代码
1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3
4 #include <QDial>
5 #include <QLabel>
6 #include <QMainWindow>
7
8 class MainWindow : public QMainWindow
9 {
10 Q_OBJECT
11
12 public:
13 MainWindow(QWidget *parent = nullptr);
14 ~MainWindow();
15
16 private:
17 /* 声明对象 */
18 QDial *dial;
19 QLabel *label;
20
21 private slots:
22 /* 槽函数 */
23 void dialValueChanged(int);
24
25 };
26 #endif // MAINWINDOW_H
在源文件“mainwindow.cpp”具体代码如下。
mainwindow.cpp编程后的代码
1 #include "mainwindow.h"
2
3 MainWindow::MainWindow(QWidget *parent)
4 : QMainWindow(parent)
5 {
6 /* 设置主窗体的位置与大小 */
7 this->setGeometry(0, 0, 800, 480);
8
9 /* 实例化对象和设置显示位置与大小 */
10 dial = new QDial(this);
11 dial->setGeometry(300, 100, 200, 200);
12
13 /* 设置页长(两个最大刻度的间距)*/
14 dial->setPageStep(10);
15
16 /* 设置刻度可见 */
17 dial->setNotchesVisible(true);
18
19 /* 设置两个凹槽之间的目标像素数 */
20 dial->setNotchTarget(1.00);
21
22 /* 设置dial值的范围 */
23 dial->setRange(0,100);
24
25 /* 开启后可指向圆的任何角度 */
26 //dial->setWrapping(true);
27
28 /* 实例化对象和设置显示位置与大小 */
29 label = new QLabel(this);
30 label->setGeometry(370, 300, 200, 50);
31
32 /* 初始化为0km/h */
33 label->setText("0km/h");
34
35 /* 信号槽连接 */
36 connect(dial, SIGNAL(valueChanged(int)),
37 this, SLOT(dialValueChanged(int)));
38 }
39
40 MainWindow::~MainWindow()
41 {
42 }
43
44 void MainWindow::dialValueChanged(int val)
45 {
46 /* QString::number()转换成字符串 */
47 label->setText(QString::number(val) + "km/h");
48 }
在源文件“main.cpp”具体代码如下。由新建项目时生成,无改动。
main.cpp编程后的代码
1 #include "mainwindow.h"
2
3 #include <QApplication>
4
5 int main(int argc, char *argv[])
6 {
7 QApplication a(argc, argv);
8 MainWindow w;
9 w.show();
10 return a.exec();
11 }
7.2.11.3运行效果
程序编译运行的结果如下,当程序初始化时,QDial控件的显示如下(注意,windows下QDial控件显示的格式可能不一样,下图为linux下的QDial控件的显示样式)。当用鼠标拖动滑块或者按键盘的上下左右方向键时,label则会显示当前“车速”。
QDial在很多场合都能使用,比如音量控制,汽车仪表盘,芝麻信用分等场合都可以使用到,只是需要我们有这个创意和想法,还需要个人的美工基础。
7.2.12 QScrollBar
7.2.12.1控件简介
QScrollBar继承QAbstractSlider。QScrollBar小部件提供垂直或水平滚动条,允许用户访问比用于显示文档的小部件大的文档部分。它提供了用户在文档中的当前位置和可见文档数量的可视化指示。滚动条通常配有其他控件,可以实现更精确的导航(这里指浏览到精确的位置)。
7.2.12.2用法示例
例19_qscrollbar创建水平和垂直滚动条(难度:简单),使用QScrollBar类实例化两个控件,一个是水平滚动条,另一个是垂直滚动条,中间用一个标签文本来显示。(本例只创建实例,不对效果进行细化(请注意:一般水平或垂直滚动条都用QScrollArea搭配其他控件使用,不单独使用QScrollBar去创建滚动条,有些控件“自带”滚动条,例如QListWidget等,都可以用QScrollArea来设置它的属性)。
在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。
在头文件“mainwindow.h”具体代码如下。
mainwindow.h编程后的代码
1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3
4 #include <QMainWindow>
5 #include <QScrollBar>
6 #include <QLabel>
7
8 class MainWindow : public QMainWindow
9 {
10 Q_OBJECT
11
12 public:
13 MainWindow(QWidget *parent = nullptr);
14 ~MainWindow();
15
16 private:
17 /* 声明水平滚动条对象 */
18 QScrollBar *horizontalScrollBar;
19
20 /* 声明垂直滚动条对象 */
21 QScrollBar *verticalScrollBar;
22
23 /* 声明标签文本 */
24 QLabel *label;
25 };
26 #endif // MAINWINDOW_H
在源文件“mainwindow.cpp”具体代码如下。
mainwindow.cpp编程后的代码
1 #include "mainwindow.h"
2
3 MainWindow::MainWindow(QWidget *parent)
4 : QMainWindow(parent)
5 {
6 /* 设置主窗体大小,位置 */
7 this->setGeometry(0,0,800,480);
8
9 /* 实例化水平滚动条及设置位置大小 */
10 horizontalScrollBar = new QScrollBar(Qt::Horizontal, this);
11 horizontalScrollBar->setGeometry(0, 450, 800, 30);
12
13 /* 实例化垂直滚动条及设置位置大小 */
14 verticalScrollBar = new QScrollBar(Qt::Vertical, this);
15 verticalScrollBar->setGeometry(770, 0, 30, 480);
16
17 /* 实例化,标签文本 */
18 label = new QLabel(this);
19 /* 设置文本 */
20 label->setText("这是一个测试");
21 /* 设置位置大小 */
22 label->setGeometry(300, 200, 100, 20);
23 }
24
25 MainWindow::~MainWindow()
26 {
27 }
在源文件“main.cpp”具体代码如下。由新建项目时生成,无改动。
main.cpp编程后的代码
1 #include "mainwindow.h"
2
3 #include <QApplication>
4
5 int main(int argc, char *argv[])
6 {
7 QApplication a(argc, argv);
8 MainWindow w;
9 w.show();
10 return a.exec();
11 }
7.2.12.3运行效果
程序编译运行的结果。如下当程序初始化时,滚动条控件的显示如下(注意,windows下滚动条控件显示的格式可能不一样,下图为linux下的滚动条控件的显示样式)。
本章未完待续......
猜你喜欢
- 2024-10-24 Qt Examples——QSlider(qt qcompleter)
- 2024-10-24 销售订单管理,Excel表格模板演示
- 2024-10-24 抓大放小,瞅瞅 Qt 的几个基础模块
- 2024-10-24 WPF --- 如何重写WPF原生控件样式?
- 2024-10-24 Python入坑系列-pyside6桌面编程之border边框
- 2024-10-24 1.3 MyFirstWidget代码讲解及实用编程技巧分享
- 2024-10-24 C#知识|.Net控件二次封装之ComboBox下拉框
- 2024-10-24 在WPF 中想要在表格的同一列上显示多个表头
- 2024-10-24 Qt模型视图结构_代理(犀牛缩放视图后看不见模型了)
- 2024-10-24 《XAML简介及常用控件》(xaml基本语法)
你 发表评论:
欢迎- 05-30springboot 集成redisson 以及分布式锁的使用
- 05-30去哪儿技术面:10亿数据如何最快速插入MySQL?
- 05-30redis介绍
- 05-30redission YYDS
- 05-30手把手教你springboot集成mybatis
- 05-30mybatis根据表逆向自动化生成代码:自动生成实体类、mapper文件
- 05-30越来越大的微信小程序
- 05-30SpringBoot之数据访问——访问SQL数据库!
- 422℃用AI Agent治理微服务的复杂性问题|QCon
- 420℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 401℃初次使用IntelliJ IDEA新建Maven项目
- 399℃Maven技术方案最全手册(mavena)
- 394℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 389℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 389℃从头搭建 IntelliJ IDEA 环境(intellij idea建包)
- 384℃IT全明星|IntelliJ IDEA学习笔记(四、idea中怎么创建maven项目)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)