Qt控件----按键

文章目录

  • 按钮:
  • 一、 QPushButton
    • 1. 控件简介
    • 2. 用法示例
    • 3. 运行效果
  • 二、 QToolButton
    • 1. 控件简介
    • 2. 用法示例
    • 3. 运行效果
  • 三、 QRadioButton
    • 1. 控件简介
    • 2. 用法示例
    • 3. 运行效果
  • 四、 QCheckBox
    • 1. 控件简介
    • 2. 用法示例
    • 3. 运行效果
  • 五、 QCommandLinkButton
    • 1. 控件简介
    • 2. 用法示例
    • 3. 运行效果
  • 六、 QDialogButtonbox
    • 1. 控件简介
    • 2. 用法示例
    • 3. 运行效果

从这章开始我们开始学习Qt 的窗口部件,其中每种类型的窗口部件都选取一个作为例子讲解它们的用法,通过例子大家能举一反三。本章也是纯代码编程,不使用 Qt Designer 图形界面开发程序。

在这章里我们可以学习 常用的 控件初始化方法,设置窗体的大小位置,颜色,文本,设计创意的例子快速学习各类控件的使用方法,力求把例子写的实用,代码注释详细。

因为控件非常多,如果觉得学习控件枯燥, 可以等用到这个控件(部件)时再参考, 不必要一次性全部掌握 ,这章节的目的是了解Qt控件类型及使用方法。

按钮:

在 Qt 里,最常用使用的控件就是按钮了,有了按钮,我们就可以点击,从而响应事件,达到人机交互的效果。不管是嵌入式或者 PC 端,界面交互,少不了按钮。Qt 按钮部件是一种常用的部件之一,Qt 内置了六种按钮部件如下:
Qt控件----按键_第1张图片

(1) QPushButton:下压按钮
(2) QToolButton:工具按钮
(3) QRadioButton:选择按钮
(4) QCheckBox:检查框
(5) QCommandLinkButton:命令链接按钮
(6) QDialogButtonBox:对话框按钮

这六种按钮部件作用简介如下:

QPushButton 继承 QAbstractButton 类,被 QCommandLinkButton 继承。通常用于执行命令或触发事件。
QToolButton 继承 QAbstractButton 类。是一种用于命令或者选项的可以快速访问的按钮,通常在 ToolBar 里面。工具按钮通常显示的是图标,而不是文本标签。ToolButton 支持自动浮起。在自动浮起模式中,按钮只有在鼠标指向它的时候才绘制三维的框架。
QRadioButton 继承 QAbstractButton 类。RadioButton 单选按钮(单选框)通常成组出现,用于提供两个或多个互斥选项。
QCheckBox 继承 QAbstractButton。复选按钮(复选框)与RadioButton 的区别是选择模式,单选按钮提供多选一,复选按钮提供多选多。
QCommandLinkButton 控件中文名是“命令链接按钮”QCommandLinkButton 继承 QPushButton。QCommandLinkButton 控件和 RadioButton 相似,都是用于在互斥选项中选择一项。表面上同平面按钮一样,但是 CommandLinkButton 除带有正常的按钮上的文字描述文本外,默认情况下,它也将携带一个箭头图标,表明按下按钮将打开另一个窗口或页面。
QDialogButtonBox 按 钮 盒 子 ( 按 钮 框 ), 是 由 QDialogButtonBox 类 包 装 成 的 。QDialogButtonBox 继承 QWidget。常用于对话框里自定义按钮,比如“确定”和“取消”按钮。

上面说的六种按钮的可用属性,信号和槽,需要用到时可在 Qt 帮助文档里查看。这里我们就略过介绍它们可用属性和信号与槽了。下面我们通过例子讲解每种按钮是如何使用,一起探究它们究竟能实现什么效果。

一、 QPushButton

1. 控件简介

在前面我们就已经接触过 QPushButton 了,在 Qt Designer 里连接信号与槽,从而实现了关闭程序的功能。下面开始重新用编写程序的方法实现使用 QPushButton 连接信号和槽实现一个小例子。

2. 用法示例

例 04_qpushbutton 窗口换肤(难度:简单),通过单击不同的按钮,改变窗口的颜色。新建一个项目名称为为 04_qpushbutton,在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。完成如下图。
Qt控件----按键_第2张图片
在头文件“mainwindow.h”具体代码如下。

1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3
4 #include <QMainWindow>
5 /* 引入 QPushButton 类 */
6 #include <QPushButton>
7
8 class MainWindow : public QMainWindow
9 {
10 Q_OBJECT
11
12 public:
13 MainWindow(QWidget *parent = nullptr);
14 ~MainWindow();
15
16 private:
17 /* 声明一个 QPushButton 对象 pushButton1 */
18 QPushButton *pushButton1;
19 /* 声明一个 QPushButton 对象 pushButton2 */
20 QPushButton *pushButton2;
21
22 private slots:
23 /* 声明对象 pushButton1 的槽函数 */
24 void pushButton1_Clicked();
25 /* 声明对象 pushButton2 的槽函数 */
26 void pushButton2_Clicked();
27 };
28 #endif // MAINWINDOW_H

第 6 行,引入 QPushButton 类。
第 18 和 20 行,声明两个 QPushButton 的对象。
第 24 和 26 行,声明两个 QPushButton 对象的槽函数。

在源文件“mainwindow.cpp”具体代码如下。

1 #include "mainwindow.h"
2
3 MainWindow::MainWindow(QWidget *parent)
4 : QMainWindow(parent)
5 {
6 /* 设置宽高为 800×480,位置在 0, 0。(0, 0)代表原点,Qt 默认最左上角的点为原
点 */
7 this->setGeometry(0, 0, 800, 480);
8
9 /* 实例化两个按钮对象,并设置其显示文本为窗口皮肤 1 和窗口皮肤 2 */
10 pushButton1 = new QPushButton("窗口皮肤 1", this);
11 pushButton2 = new QPushButton("窗口皮肤 2", this);
12
13 /* 设定两个 QPushButton 对象的位置 */
14 pushButton1->setGeometry(300,200,80,40);
15 pushButton2->setGeometry(400,200,80,40);
16
17 /* 信号槽连接 */
18 connect(pushButton1, SIGNAL(clicked()), this,
SLOT(pushButton1_Clicked()));
19 connect(pushButton2, SIGNAL(clicked()), this,
SLOT(pushButton2_Clicked()));
20 }
21
22 MainWindow::~MainWindow()
23 {
24 }
25
26 /* 槽函数的实现 */
27 void MainWindow::pushButton1_Clicked()
28 {
29 /* 设置主窗口的样式 1 */
30 this->setStyleSheet("QMainWindow { background-color: rgba(255, 245,
238, 100%); }");
31 }
32
33 /* 槽函数的实现 */
34 void MainWindow::pushButton2_Clicked()
35 {
36 /* 设置主窗口的样式 2 */
37 this->setStyleSheet("QMainWindow { background-color: rgba(238, 122,
233, 100%); }");
38 }

第 7 行,设置程序窗口的显示位置和显示大小,如果不设置,运行的程序窗口在 Ubuntu里有可能在某个位置出现,而在 Windows 一般出现在中间。
第 10 和 11 行,实际化 QPushButton 对象。在初始化的时候可以传入 QString 类型串,作为按钮的显示文本。
第 14 行,设置按钮的大小和位置,按钮的大小不能设置过小,否则按钮上的文本可能显示不全。
第 18 行和 19 行,连接两个 QPushButton 对象的信号与槽。
第 27 行至 38 行,两个 QPushButton 的槽函数实现,设置主窗体的样式表,其中设置
background-color 的 rgba 参数即可改变窗体的背景颜色。关于什么是样式表,如何设置样式表,以后会以一个小节专门讲解。

3. 运行效果

程序编译及运行后,点击窗口皮肤 1 按钮,主窗体显示效果如下。
Qt控件----按键_第3张图片
点击窗口皮肤 2 按钮,主窗体显示效果如下。
Qt控件----按键_第4张图片

二、 QToolButton

1. 控件简介

工具按钮(QToolButton)区别于普通按钮(QPushButton)的一点是,工具按钮(QToolButton)可以带图标。这里区别下图标和按钮的背景图片是不一样的。通常我们在 QToolBar 这种工具条(工具栏)上设置不同的按钮,如果这些按钮还带图标和文本,那么 QToolButton 是个不错的选择。

2. 用法示例

例 05_qtoolbutton 自定义工具栏(难度:简单)。新建一个项目名称为 05_qtoolbutton。在新建例程中不要勾选“Generate form”,默认继承QMainWindow 类即可。项目新建完成如下图。
Qt控件----按键_第5张图片
在头文件“mainwindow.h”具体代码如下。

1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3
4 #include <QMainWindow>
5 /* 引入 QToolButton 类 */
6 #include <QToolButton>
7 /* 引入 QToolBar 类 */
8 #include <QToolBar>
9
10 class MainWindow : public QMainWindow
11 {
12 Q_OBJECT
13
14 public:
15 MainWindow(QWidget *parent = nullptr);
16 ~MainWindow();
17
18 private:
19 /* 声明一个 QToolButton 对象 */
20 QToolButton *toolButton;
21 /* 声明一个 QToolBar 对象 */
22 QToolBar *toolBar;
23 };
24 #endif // MAINWINDOW_H

第 20 和 22 行,声明 QToolButton 对象和 QtoolBar 对象。

在源文件“mainwindow.cpp”具体代码如下。

1 #include "mainwindow.h"
2 #include <QApplication>
3 #include <QStyle>
4
5 MainWindow::MainWindow(QWidget *parent)
6 : QMainWindow(parent)
7 {
8 /* 设置主窗体的位置和大小 */
9 this->setGeometry(0, 0, 800, 480);
10
11 /* 实例化 QToolBar 对象 */
12 toolBar = new QToolBar(this);
13 /* 设置 toolBar 的位置和大小 */
14 toolBar->setGeometry(0, 0, 800, 100);
15
16 /* 实例化 QStyle 类对象,用于设置风格,调用系统类自带的图标 */
17 QStyle *style = QApplication::style();
18
19 /* 使用 Qt 自带的标准图标,可以在帮助文档里搜索 QStyle::StandardPixmap */
20 QIcon icon =
style->standardIcon(QStyle::SP_TitleBarContextHelpButton);
21
22 /* 实例化 QToolButton 对象 */
23 toolButton = new QToolButton();
24
25 /* 设置图标 */
26 toolButton->setIcon(icon);
27 /* 设置要显示的文本 */
28 toolButton->setText("帮助");
29 /* 调用 setToolButtonStyle()方法,设置 toolButoon 的样式,设置为文本置于
图标下方 */
30 toolButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
31
32 /* 最后将 toolButton 添加到 ToolBar 里 */
33 toolBar->addWidget(toolButton);
34 }
35
36 MainWindow::~MainWindow()
37 {
}

这段代码的流程是,初始化 toolBar(工具条/工具栏)对象,然后初始化 toolButton(工具按钮)对象,设置工具按钮的样式。最后将 toolButton(工具按钮)添加到 toolBar(工具条/工具栏)上。这样就完成了自定义工具栏的设计。

在源文件“main.cpp”具体代码由新建项目时生成,无改动。

3. 运行效果

最终程序实现的效果如下。成功的将自定义的工具按钮嵌入工具栏中。在许多含有工具栏的软件都可以看到这种设计,都可以使用 Qt 来实现类似的功能。

Qt控件----按键_第6张图片

三、 QRadioButton

1. 控件简介

QRadioButton 部件提供了一个带有文本标签的单选框(单选按钮)。QRadioButton 是一个可以切换选中(checked)或未选中(unchecked)状态的选项按钮。单选框通常呈现给用户一个“多选一”的选择。也就是说,在一组单选框中,一次只能选中一个单选框。默认在同一个父对象下,初始化后点击它们是互斥状态。

2. 用法示例

例 06_radiobutton 仿手机开关效果(难度:中等)。本例将实现手机开关效果,需要使用到Qt 样式表,加载 qss 样式表文件,只是把样式表写到 qss 文件里了。
这里我们慢慢接触 Qt 的样式表了,正因为有样式表我们才能写一些比较有实际应用的例子和比较炫的例子。
在新建例程中不要勾选“Generate form”,默认继承 QMainWindow 类即可。项目新建完成如下图。
Qt控件----按键_第7张图片
添加资源文件,按如下步骤。右键项目,选择 Add New…。

Qt控件----按键_第8张图片
选择一个模板,选择 Qt 模板,再选择 Qt Resource Files,点击 Choose。这里 Qt 模板我们就不详细说了,日后我们需要使用什么模板,用到再了解。现在没必要一下子各个模板的用法,实际上我们常用的不多。

Qt控件----按键_第9张图片
填上资源文件的名称(可随意写一个,编者简写为 res),默认添加项目路径下。后面的步骤默认即可,点击完成。
Qt控件----按键_第10张图片
新建完成了资源文件后,默认会进入 res.qrc 文件编辑模式(如果关闭了,可以右键这个文件点击选择“Open in Editor”),点击 Add Prefix 添加前缀,添加前缀的目的是方便分类管理文件,比如我们现在第⑪处添加了前缀/。“/”一定需要写,否则会找不到路径,这有点像 Linux的根节点一样

Qt控件----按键_第11张图片
添加了前缀后,我们添加资源图片,放在/images 前缀的下面。这里我们准备了两张图片,在本项目路径 images 文件夹(images 文件夹先手动创建)下。如下图步骤,添加完成需要按“Ctrl+ S”保存 res.qrc 才会看到左边的结果。添加完成如下图。
Qt控件----按键_第12张图片
添加 qss 文件。QSS 文件是使用 Qt 程序相关联的样式表文件。它由 GUI 元素的外观和感觉,包括布局,颜色,鼠标的行为,大小和字体。它的风格,一个可以合并到一个 UI(用户界面)。与 HTML 的 CSS 类似,Qt 的样式表是纯文本的格式定义,在应用程序运行时可以载入和解析这些样式定义,从而使应用程序的界面呈现不同的效果。

Qt控件----按键_第13张图片
新建一个 style.qss 文件,如下图,默认添加到项目的路径下,后面步骤默认即可,直至完成。

Qt控件----按键_第14张图片
qss 文件添加后如下图。

Qt控件----按键_第15张图片
在头文件“mainwindow.h”具体代码如下

1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3
4 #include <QMainWindow>
5 /* 引入 QRadioButton */
6 #include <QRadioButton>
7
8 class MainWindow : public QMainWindow
9 {
10 Q_OBJECT
11
12 public:
13 MainWindow(QWidget *parent = nullptr);
14 ~MainWindow();
15
16 private:
17 /* 声明两个 QRadioButton 对象 */
18 QRadioButton *radioButton1;
19 QRadioButton *radioButton2;
20 };
21 #endif // MAINWINDOW_H

在第 18 和 19 行声明两个 QRadioButton 对象。

在源文件“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 this->setStyleSheet("QMainWindow {background-color: rgba(200, 50,
100, 100%);}");
9
10 /* 实例化对象 */
11 radioButton1 = new QRadioButton(this);
12 radioButton2 = new QRadioButton(this);
13
14 /* 设置两个 QRadioButton 的位置和显示大小 */
15 radioButton1->setGeometry(300, 200, 100, 50);
16 radioButton2->setGeometry(400, 200, 100, 50);
17
18 /* 设置两个 QRadioButton 的显示文本 */
19 radioButton1->setText("开关一");
20 radioButton2->setText("开关二");
21
22 /* 设置初始状态,radioButton1 的 Checked 为 false,另一个为 true*/
23 radioButton1->setChecked(false);
24 radioButton2->setChecked(true);
25 }
26
27 MainWindow::~MainWindow()
28 {
29 }

第 23 行和 24 行,设置 QRadioButton 对象的初始化状态,让它们互斥

在源文件“main.cpp”具体代码如下。我们需要在 main.cpp 里加载 qss 文件。

1 #include "mainwindow.h"
2
3 #include <QApplication>
4 /* 引入 QFile */
5 #include <QFile>
6
7 int main(int argc, char *argv[])
8 {
9 QApplication a(argc, argv);
10 /* 指定文件 */
11 QFile file(":/style.qss");
12
13 /* 判断文件是否存在 */
14 if (file.exists() ) {
15 /* 以只读的方式打开 */
16 file.open(QFile::ReadOnly);
17 /* 以字符串的方式保存读出的结果 */
18 QString styleSheet = QLatin1String(file.readAll());
19 /* 设置全局样式 */
20 qApp->setStyleSheet(styleSheet);
21 /* 关闭文件 */
22 file.close();
23 }
24 MainWindow w;
25 w.show();
26 return a.exec();
27 }

第 11 行至 23 行,读取 style.qss 的内容。并设置全局样式。

在源文件“style.qss”具体代码如下,与 HTML 里的 css 语法相似。如果不会写 qss 的内容,可以参考 Qt 帮助文档的内容,在里面搜索“qt style”。在里面找相关的例子参考,这里我们只是初步了解下这个 qt style。

1 QRadioButton{
2 spacing: 2px;
3 color: white;
4 }
5 QRadioButton::indicator {
6 width: 45px;
7 height: 30px;
8 }
9 QRadioButton::indicator:unchecked {
10 image: url(:/images/switch_off.png);
11 }
12 QRadioButton::indicator:checked {
13 image: url(:/images/switch_on.png);
14 }

在第 10 行和第 13 行,设置 QRadioButton 的 indicator 的背景图片。这样当它们点击切换时就会看到类似开关切换的效果了。

3. 运行效果

编译程序运行的效果如下。点击关闭开关一,开关二即打开;点击开关二,开关一即打开。因为它们默认是互斥的效果。在某种情况下我们需要使用这种效果,比如我们在网上看视频时经常需要切换线路,线路可能有几种,但是只有一种是激活状态的,我们就可以应用到这个方向上。
Qt控件----按键_第16张图片
在这个例子里我们学习到如何添加资源,步骤也详细,后面的例程都可参考这个例程来添加资源文件,不再详细讲解添加过程。我们已经初步了解了 Qt 的样式表文件,如果要做好看的界面 Qt 的样式表文件是少不了的。

可能我们还不懂 Qt 样式表的语法,不知道如何下手。我们可以边学边了解,可以参考 Qt 帮助文档里的用法,qss 的功能不止这么点。现在的重点是学习QRadioButton 这个控件。

四、 QCheckBox

1. 控件简介

QCheckBox 继承 QAbstractButton。复选按钮(复选框)与 RadioButton 的区别是选择模式,单选按钮提供多选一,复选按钮提供多选多。

2. 用法示例

例 07_qcheckbox,三态选择框(难度:简单)。使用一个 QCheckBox,用户通过点击可改变当选择框的状态。

在新建例程中不要勾选“Generate form”,默认继承 QMainWindow 类即可。项目新建完成如下图。编者已经添加了 qss 文件和三张资源图片。
Qt控件----按键_第17张图片
在头文件“mainwindow.h”具体代码如下。

1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3
4 #include <QMainWindow>
5 /* 引入 QCheckBox */
6 #include <QCheckBox>
7
8 class MainWindow : public QMainWindow
9 {
10 Q_OBJECT
11
12 public:
13 MainWindow(QWidget *parent = nullptr);
14 ~MainWindow();
15
16 private:
17 /* 声明一个 QCheckBox 对象 */
18 QCheckBox *checkBox;
19 private slots:
20 /* 声明 QCheckBox 的槽函数,并带参数传递,用这个参数接收信号的参数 */
21 void checkBoxStateChanged(int);
22
23 };
24 #endif // MAINWINDOW_H

在第 18 和 19 行声明两个 QCheckBox 对象。

在源文件“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 this->setStyleSheet("QMainWindow {background-color: rgba(100, 100,
100, 100%);}");
9
10 /* 实例化对象 */
11 checkBox = new QCheckBox(this);
12
13 /* 设置 QCheckBox 位置和显示大小 */
14 checkBox->setGeometry(350, 200, 250, 50);
15
16 /* 初始化三态复选框的状态为 Checked */
17 checkBox->setCheckState(Qt::Checked);
18
19 /* 设置显示的文本 */
20 checkBox->setText("初始化为 Checked 状态");
21
22 /* 开启三态模式,必须开启,否则只有两种状态,即 Checked 和 Unchecked */
23 checkBox->setTristate();
24
25 /* 连接 checkBox 的信号 stateChanged(int),与我们定义的槽
checkBoxStateChanged(int)连接 */
26 connect(checkBox, SIGNAL(stateChanged(int)), this,
SLOT(checkBoxStateChanged(int)));
27 }
28
29 MainWindow::~MainWindow()
30 {
31 }
32
33 /* 槽函数的实现 */
34 void MainWindow::checkBoxStateChanged(int state)
35 {
36 /* 判断 checkBox 的 state 状态,设置 checkBox 的文本 */
37 switch (state) {
38 case Qt::Checked:
39 /* 选中状态 */
40 checkBox->setText("Checked 状态");
41 break;
42 case Qt::Unchecked:
43 /* 未选中状态 */
44 checkBox->setText("Unchecked 状态");
45 break;
46 case Qt::PartiallyChecked:
47 /* 半选状态 */
48 checkBox->setText("PartiallyChecked 状态");
49 break;
50 default:
51 break;
52 }
53 }

第 23 行,需要注意的是设置 QCheckBox 对象 checkBox 需要设置为三态模式。

在源文件“main.cpp”具体代码如下。我们需要在 main.cpp 里加载 qss 文件。

1 #include "mainwindow.h"
2
3 #include <QApplication>
4 /* 引入 QFile */
5 #include <QFile>
6
7 int main(int argc, char *argv[])
8 {
9 QApplication a(argc, argv);
10 /* 指定文件 */
11 QFile file(":/style.qss");
12
13 /* 判断文件是否存在 */
14 if (file.exists() ) {
15 /* 以只读的方式打开 */
16 file.open(QFile::ReadOnly);
17 /* 以字符串的方式保存读出的结果 */
18 QString styleSheet = QLatin1String(file.readAll());
19 /* 设置全局样式 */
20 qApp->setStyleSheet(styleSheet);
21 /* 关闭文件 */
22 file.close();
23 }
24 MainWindow w;
25 w.show();
26 return a.exec();
27 }

第 11 行至 23 行,读取 style.qss 的内容。并设置全局样式。

在源文件“style.qss”具体代码如下。

1 QCheckBox{
2 spacing: 5px;
3 color: white;
4 }
5 QCheckBox::indicator {
6 width: 50px;
7 height: 50px;
8 }
9 QCheckBox::indicator:enabled:unchecked {
10 image: url(:/images/unchecked.png);
11 }
12 QCheckBox::indicator:enabled:checked {
13 image: url(:/images/checked.png);
14 }
15 QCheckBox::indicator:enabled:indeterminate {
16 image: url(:/images/indeterminate.png);
17 }

在第 10 行和第 13 行,设置 QCheckBox 的 indicator 的背景图片。这样当它们点击切换时就会看到 QCheckBox 的三种选择状态了。

3. 运行效果

编译程序运行的效果如下,多次点击 checkBox,即可看到 QCheckBox 的三种状态切换。
选中状态时。
Qt控件----按键_第18张图片
半选状态。
Qt控件----按键_第19张图片
未选中状态。
Qt控件----按键_第20张图片
我们经常在软件安装时可以看到这种三态选择框,如果我们设计的程序有多种选择的项也可以设计这种选择框。

五、 QCommandLinkButton

1. 控件简介

QCommandLinkButton 控件中文名是“命令链接按钮”。QCommandLinkButton 继承QPushButton。CommandLinkButton 控件和 RadioButton 相似,都是用于在互斥选项中选择一项。表面上同平面按钮一样,但是 CommandLinkButton 除带有正常的 按钮上的文字描述文本外,默认情况下,它也将携带一个箭头图标,表明按下按钮将打开另一个窗口或页面。

2. 用法示例

例 08_qcommandlinkbutton 链接窗口(难度:简单)。
使用一个 QCommandLinkButton,点击打开系统的窗口。在新建例程中不要勾选“Generate form”,默认继承 QMainWindow 类即可。项目新建完成
如下图。
Qt控件----按键_第21张图片

在头文件“mainwindow.h”具体代码如下。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
/* 引入QCommandLinkButton */
#include 

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    /* 声明一个QCommandLinkButton对象 */
    QCommandLinkButton *commandLinkButton;

private slots:
    /* 声明槽函数,用于点击commandLinkButton后触发 */
    void commandLinkButtonClicked();


};
#endif // MAINWINDOW_H

在第 21 行,声明一个 QComboBox 对象。

在源文件“mainwindow.cpp”具体代码如下。

1 #include "mainwindow.h"
2 /* 引入桌面服务,用来打开系统文件夹对话框 */
3 #include <QDesktopServices>
4 /* 引入 QUrl */
5 #include <QUrl>
6
7 MainWindow::MainWindow(QWidget *parent)
8 : QMainWindow(parent)
9 {
10 /* 主窗体设置位置和显示的大小 */
11 this->setGeometry(0, 0, 800, 480);
12
13 /* 实例化对象 */
14 commandLinkButton = new QCommandLinkButton(
15 "打开/home 目录", "点击此将调用系统的窗口打开/home 目录",this);
16
17 /* 设置 QCommandLinkButton 位置和显示大小 */
18 commandLinkButton->setGeometry(300, 200, 250, 60);
19
20 /* 信号槽连接 */
21 connect(commandLinkButton, SIGNAL(clicked()), this,
22 SLOT(commandLinkButtonClicked()));
23 }
24
25 MainWindow::~MainWindow()
26 {
27 }
28
29 void MainWindow::commandLinkButtonClicked()
30 {
31 /* 调用系统服务打开/home 目录 */
32 QDesktopServices::openUrl(QUrl("file:home/") );
33 }

第14行,实例化时原型是QCommandLinkButton::QCommandLinkButton(const QString &text,
const QString &description, QWidget *parent = nullptr)。

在源文件“main.cpp”具体代码由新建项目时生成,无改动。

3. 运行效果

程序编译运行的结果如下。点击中间的打开/home 目录按钮,结果如下。系统弹出一个窗口,直接打开到/home 目录。
Qt控件----按键_第22张图片
点击打开/home 目录后,系统将弹出/home 目录路径窗口。
Qt控件----按键_第23张图片

六、 QDialogButtonbox

1. 控件简介

对话框和消息框通常以符合该平台界面指导原则的布局呈现按钮。不同平台的对话框总是有不同的布局。QDialogButtonBox 允许开发人员向其添加按钮,并将自动使用适合用户桌面环境的布局。也就是说我们可以使用系统的自带的对话框按钮,也可以自己定义对话框按钮。QDialogButtonBox 常用的按钮有如下几种,更多的可以参考 Qt 帮助文档。

button_Box = new QDialogButtonBox(QDialogButtonBox::Ok
| QDialogButtonBox::Cancel
| QDialogButtonBox::Open
| QDialogButtonBox::Save
| QDialogButtonBox::Close
| QDialogButtonBox::Discard
| QDialogButtonBox::Apply
| QDialogButtonBox::Reset
| QDialogButtonBox::RestoreDefaults
| QDialogButtonBox::Help
| QDialogButtonBox::SaveAll);

2. 用法示例

例 09_qdialogbuttonbox, 自定义 QDialogButtonBox 里的按钮(难度:简单)。
使用一个QDialogButtonBox,在 QDialogButtonBox 添加 Qt 提供的按钮,或者自定义按钮。在新建例程中不要勾选“Generate form”,默认继承 QMainWindow 类即可。项目新建完成如下图。
Qt控件----按键_第24张图片
在头文件“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”具体代码如下。

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 dialogButtonBox = new QDialogButtonBox(this);
13 dialogButtonBox->setGeometry(300, 200, 200, 30);
14
15 /*使用 Qt 的 Cancel 按钮*/
16 dialogButtonBox->addButton(QDialogButtonBox::Cancel);
17
18 /*将英文"Cancel"按钮设置为中文"取消" */
19 dialogButtonBox->button(QDialogButtonBox::Cancel)->setText("取消
");
20
21 /* 设定位置与大小 */
22 pushButton = new QPushButton(tr("自定义"));
23
24 /* 将 pushButton 添加到 dialogButtonBox,并设定 ButtonRole 为 ActionRole
*/
25 dialogButtonBox->addButton(pushButton,
QDialogButtonBox::ActionRole);
26
27 /* 信号槽连接,带参数 QAbstractButton *,用于判断用户点击哪个按键 */
28 connect(dialogButtonBox, SIGNAL(clicked(QAbstractButton * )),
29 this, SLOT(dialogButtonBoxClicked(QAbstractButton *)));
30 }
31
32 MainWindow::~MainWindow()
33 {
34 }
35
36 void MainWindow::dialogButtonBoxClicked(QAbstractButton *button)
37 {
38 /* 判断点击的对象是否为 QDialogButtonBox::Cancel */
39 if(button == dialogButtonBox->button(QDialogButtonBox::Cancel)) {
40 /* 打印“单击了取消键” */
41 qDebug() <<"单击了取消键"<<endl;
42 /* 判断点击的对象是否为 pushButton */
43 }else if(button == pushButton) {
44 /* 打印“单击了自定义键” */
45 qDebug() <<"单击了自定义键"<<endl;
46 }
47 }

第 16 行,实例化时原型是 void QDialogButtonBox::addButton(QAbstractButton *button,
QDialogButtonBox::ButtonRole role)。
第 41 和 45 行,我们第一次用 qDebug()。Qt 一般调试都是用 qDebug()来打印的。这与 C++的 cout 是功能基本一样。只是 Qt 自定义为 qDebug()而已。

在源文件“main.cpp”具体代码由新建项目时生成,无改动。

3. 运行效果

程序编译运行的结果如下。点击自定义按钮和取消按钮,在应用程序输出窗口可以看到对应的点击事件。
Qt控件----按键_第25张图片

你可能感兴趣的:(QT5,qt)