正点原子I.MX6U嵌入式Qt开发指南:第七章《Qt控件 5》
bigegpt 2024-10-12 05:26 39 浏览
今日头条/西瓜视频/抖音短视频 同名:正点原子
感谢各位的关注和支持,你们的关注和支持是正点原子无限前进的动力。
第七章《Qt控件 5》
由于本章内容较多,所以第七章《Qt控件》将会分为几个部分进行内容的发布,更多文章内容请持续关注今日头条正点原子官方账号。
7.5布局管理
Qt提供了非常丰富的布局类,基本布局管理类包括:QBoxLayout、QGridLayout、QFormLayout和QStackedLayout。这些类都从QLayout继承而来,它们都来源于QObject(而不是QWidget)。创建更加复杂的布局,可以让它们彼此嵌套完成。
其中QBoxLayout提供了水平和垂直的布局管理;QFormLayout提供了将输入部件和标签成组排列的布局管理;QGridLayout提供了网格形式的布局管理;QStackedLayout提供了一组布局后的部件,可以对它们进行分布显示。
它们的继承关系如下图。
下面将学习Layouts组里面的4种布局,如下图。
各个控件的名称依次解释如下。
(1) Vertiacl Layout:垂直布局
(2) Horizontal Layout:水平布局
(3) Grid Layout:网格布局
(4) Form Layout:表单布局
QBoxLayout继承QLayout。QBoxLayout类提供水平或垂直地排列子部件。QBoxLayout获取从它的父布局或从parentWidget()中所获得的空间,将其分成一列框,并使每个托管小部件填充一个框。
QGridLayout继承QLayout。QGridLayout获取可用的空间(通过其父布局或parentWidget())),将其分为行和列,并将其管理的每个小部件放入正确的单元格中。由于网格布局管理器中的组件也是会随着窗口拉伸而发生变化的,所以也是需要设置组件之间的比例系数的,与QBoxLayout不同的是网格布局管理器还需要分别设置行和列的比例系数。
QFormLayout继承QLayout。QFormLayout类管理输入小部件及其关联标签的表单。QFormLayout是一个方便的布局类,它以两列的形式布局其子类。左列由标签组成,右列由“字段”小部件(QLineEdit(行编辑器)、QSpinBox(旋转框等))组成。通常使用setRowWrapPolicy(RowWrapPolicy policy)接口函数设置布局的换行策略进行布局等。
7.5.1QBoxLayout
7.5.1.1控件简介
QBoxLayout继承QLayout。QBoxLayout类提供水平或垂直地排列子部件。QBoxLayout获取从它的父布局或从parentWidget()中所获得的空间,将其分成一列框,并使每个托管小部件填充一个框。
7.5.1.2用法示例
例29_qboxlayout,垂直或水平布局(难度:简单),使用几个按钮,将他们设置为垂直排布和水平排布,以及设置它们的一些属性。
在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。
在头文件“mainwindow.h”具体代码如下。
mainwindow.h编程后的代码
1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3
4 #include <QMainWindow>
5 #include <QHBoxLayout>
6 #include <QVBoxLayout>
7 #include <QPushButton>
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 QPushButton *pushButton[6];
20
21 /* 定义两个widget,用于容纳排布按钮 */
22 QWidget *hWidget;
23 QWidget *vWidget;
24
25 /* QHBoxLayout与QVBoxLayout对象 */
26 QHBoxLayout *hLayout;
27 QVBoxLayout *vLayout;
28
29 };
30 #endif // MAINWINDOW_H
在源文件“mainwindow.cpp”具体代码如下。
mainwindow.cpp编程后的代码
1 #include "mainwindow.h"
2 #include <QList>
3
4 MainWindow::MainWindow(QWidget *parent)
5 : QMainWindow(parent)
6 {
7 /* 设置主窗口的位置与大小 */
8 this->setGeometry(0, 0, 800, 480);
9
10 /* 实例化与设置位置大小 */
11 hWidget = new QWidget(this);
12 hWidget->setGeometry(0, 0, 800, 240);
13
14 vWidget = new QWidget(this);
15 vWidget->setGeometry(0, 240, 800, 240);
16
17 hLayout = new QHBoxLayout();
18 vLayout = new QVBoxLayout();
19
20 /* QList<T>是Qt的一种泛型容器类。
21 * 它以链表方式存储一组值,
22 * 并能对这组数据进行快速索引
23 */
24 QList <QString>list;
25 /* 将字符串值插入list */
26 list<<"one"<<"two"<<"three"<<"four"<<"five"<<"six";
27
28 /* 用一个循环实例化6个按钮 */
29 for(int i = 0; i < 6; i++){
30 pushButton[i] = new QPushButton();
31 pushButton[i]->setText(list[i]);
32 if(i < 3) {
33 /* 将按钮添加至hLayout中 */
34 hLayout->addWidget(pushButton[i]);
35 } else {
36 /* 将按钮添加至vLayout中 */
37 vLayout->addWidget(pushButton[i]);
38 }
39 }
40 /* 设置间隔为50 */
41 hLayout->setSpacing(50);
42
43 /* hWidget与vWidget的布局设置为hLayout/vLayout */
44 hWidget->setLayout(hLayout);
45 vWidget->setLayout(vLayout);
46 }
47
48 MainWindow::~MainWindow()
49 {
50 }
在源文件“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.5.1.3运行效果
程序编译运行的结果如下。可以看到在hWidget中添加了3个水平排布的按钮,在vWidget中添加了3个垂直排布的按钮。
7.5.2QGridLayout
7.5.2.1控件简介
QGridLayout类提供了布局管理器里的一种以网格(二维)的方式管理界面组件,以按钮组件为例,它们所对应网格的坐标下表,与二维数组类似。
0,0(组件一) | 0,1(组件二) |
1,0(组件三) | 1,1(组件四) |
QGridLayout继承QLayout。QGridLayout获取可用的空间(通过其父布局或parentWidget())),将其分为行和列,并将其管理的每个小部件放入正确的单元格中。由于网格布局管理器中的组件也是会随着窗口拉伸而发生变化的,所以也是需要设置组件之间的比例系数的,与QBoxLayout不同的是网格布局管理器还需要分别设置行和列的比例系数。
7.5.2.2用法示例
例30_qgridlayout,网格布局(难度:简单),使用几个按钮,将他们设置为网格布局,同时设置它们的行、列比例系数(拉伸因子),以及设置它们的一些属性。
在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。
在头文件“mainwindow.h”具体代码如下。
mainwindow.h编程后的代码
1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3
4 #include <QMainWindow>
5 #include <QGridLayout>
6 #include <QPushButton>
7
8 class MainWindow : public QMainWindow
9 {
10 Q_OBJECT
11
12 public:
13 MainWindow(QWidget *parent = nullptr);
14 ~MainWindow();
15 private:
16
17 /* 声明widget窗口部件,用于容纳下面4个pushButton按钮 */
18 QWidget *gWidget;
19
20 /* 声明QGridLayout对象 */
21 QGridLayout *gridLayout;
22
23 /* 声明pushButton按钮数组 */
24 QPushButton *pushButton[4];
25
26 };
27 #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 gWidget = new QWidget(this);
11 /* 设置gWidget居中央 */
12 this->setCentralWidget(gWidget);
13
14 gridLayout = new QGridLayout();
15 /* QList链表,字符串类型 */
16 QList <QString> list;
17 list<<"按钮1"<<"按钮2"<<"按钮3"<<"按钮4";
18 for (int i = 0; i < 4; i++){
19 pushButton[i] = new QPushButton();
20 pushButton[i]->setText(list[i]);
21 /* 设置最小宽度与高度 */
22 pushButton[i]->setMinimumSize(100, 30);
23 /* 自动调整按钮的大小 */
24 pushButton[i]->setSizePolicy(
25 QSizePolicy::Expanding,
26 QSizePolicy::Expanding
27 );
28 switch (i) {
29 case 0:
30 /* 将pushButton[0]添加至网格的坐标(0,0),下同 */
31 gridLayout->addWidget(pushButton[i], 0, 0);
32 break;
33 case 1:
34 gridLayout->addWidget(pushButton[i], 0, 1);
35 break;
36 case 2:
37 gridLayout->addWidget(pushButton[i], 1, 0);
38 break;
39 case 3:
40 gridLayout->addWidget(pushButton[i], 1, 1);
41 break;
42 default:
43 break;
44 }
45 }
46 /* 设置第0行与第1行的行比例系数 */
47 gridLayout->setRowStretch(0, 2);
48 gridLayout->setRowStretch(1, 3);
49
50 /* 设置第0列与第1列的列比例系数 */
51 gridLayout->setColumnStretch(0, 1);
52 gridLayout->setColumnStretch(1, 3);
53
54 /* 将gridLayout设置到gWidget */
55 gWidget->setLayout(gridLayout);
56 }
57
58 MainWindow::~MainWindow()
59 {
60 }
在源文件“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.5.2.3运行效果
程序编译运行的结果如下。可以看到在gWidget中添加了4个按钮,因为设置了行、列的系数比(拉伸因子),所以看到的按钮是按系数比的比例显示。
7.5.3QFormLayout
7.5.3.1控件简介
QFormLayout继承QLayout。QFormLayout类管理输入小部件及其关联标签的表单。QFormLayout是一个方便的布局类,它以两列的形式布局其子类。左列由标签组成,右列由“字段”小部件(QLineEdit(行编辑器)、QSpinBox(旋转框等))组成。通常使用setRowWrapPolicy(RowWrapPolicy policy)接口函数设置布局的换行策略进行布局等。
7.5.3.2用法示例
例31_qformlayout,表单布局(难度:简单),将使用addRow(const QString &labelText, QWidget *field)来创建一个带有给定文本的QLabel及QWidget小部件,并且它们是伙伴关系。简单的展示表单布局的使用。
在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。
在头文件“mainwindow.h”具体代码如下。
mainwindow.h编程后的代码
1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3
4 #include <QMainWindow>
5 #include <QFormLayout>
6 #include <QLineEdit>
7
8 class MainWindow : public QMainWindow
9 {
10 Q_OBJECT
11
12 public:
13 MainWindow(QWidget *parent = nullptr);
14 ~MainWindow();
15 private:
16 /* widget对象 */
17 QWidget *fWidget;
18
19 /* 用于输入用户名 */
20 QLineEdit *userLineEdit;
21
22 /* 用于输入密码 */
23 QLineEdit *passwordLineEdit;
24
25 /* 声明QFormLayout对象 */
26 QFormLayout *formLayout;
27 };
28 #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 fWidget = new QWidget(this);
11 fWidget->setGeometry(250, 100, 300, 200);
12
13 userLineEdit = new QLineEdit();
14 passwordLineEdit = new QLineEdit();
15
16 formLayout = new QFormLayout();
17
18 /* 添加行 */
19 formLayout->addRow("用户名:", userLineEdit);
20 formLayout->addRow("密码 :", passwordLineEdit);
21
22 /* 设置水平垂直间距 */
23 formLayout->setSpacing(10);
24
25 /* 设置布局外框的宽度 */
26 formLayout->setMargin(20);
27
28 /* 将formLayout布局到fWidget */
29 fWidget->setLayout(formLayout);
30 }
31
32 MainWindow::~MainWindow()
33 {
34 }
在源文件“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.5.3.3运行效果
程序编译运行的结果如下。可以看到在fWidget中添加了两行,同时设置了它们的间隔,与距边框的宽度。与QGirdLayout布局比较,QFomLayout布局比较适用于行与列比较少的布局格局。如果是多行多列的布局,应该使用QGirdLayout布局。
7.6空间间隔
空间间隔组(Spacers),如下图所示
(1) Horizontal Spacer:水平间隔
(2) Vertical Spacer:垂直间隔
QSpacerItem继承QLayoutItem。QSpacerItem类在布局中提供空白(空间间隔)。所以QSpacerItem是在布局中使用的。它包含Horizontal Spacer(水平间隔)与Vertical Spacer(垂直间隔)。
7.6.1QSpacerItem
7.6.1.1控件简介
QSpacerItem继承QLayoutItem。QSpacerItem类在布局中提供空白(空间间隔)。所以QSpacerItem是在布局中使用的。
7.6.1.2用法示例
例32_qspaceritem,空间间隔(难度:一般),使用4个按钮,在垂直布局添加垂直间隔与按钮1,在水平布局添加按钮2~4与水平间隔。简单的展示空间间隔布局的使用方法。在程序运行结果分析了空间间隔部分。
在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。
在头文件“mainwindow.h”具体代码如下。
mainwindow.h编程后的代码
1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3
4 #include <QMainWindow>
5 #include <QPushButton>
6 #include <QSpacerItem>
7 #include <QBoxLayout>
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 QPushButton *bt[4];
20 /* 垂直间隔 */
21 QSpacerItem *vSpacer;
22 /* 水平间隔 */
23 QSpacerItem *hSpacer;
24 /* 声明一个widget用来存放布局的内容 */
25 QWidget *widget;
26 /* 主布局对象 */
27 QHBoxLayout *mainLayout;
28 /* 垂直布局对象 */
29 QVBoxLayout *vBoxLayout;
30 /* 水平布局对象 */
31 QHBoxLayout *hBoxLayout;
32
33 };
34 #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 widget = new QWidget(this);
10 /* 居中widget */
11 this->setCentralWidget(widget);
12
13 /* 实例化对象 */
14 vSpacer = new QSpacerItem(10, 10,
15 QSizePolicy::Minimum,
16 QSizePolicy::Expanding
17 );
18 hSpacer = new QSpacerItem(10, 10,
19 QSizePolicy::Expanding,
20 QSizePolicy::Minimum
21 );
22
23 vBoxLayout = new QVBoxLayout();
24 hBoxLayout = new QHBoxLayout();
25 mainLayout = new QHBoxLayout();
26
27 /* 在vBoxLayout添加垂直间隔 */
28 vBoxLayout->addSpacerItem(vSpacer);
29
30 QList <QString>list;
31 /* 将字符串值插入list */
32 list<<"按钮1"<<"按钮2"<<"按钮3"<<"按钮4";
33 /* 用一个循环实例化4个按钮 */
34 for(int i = 0; i < 4 ; i++){
35 bt[i] = new QPushButton();
36 bt[i]->setText(list[i]);
37 if (i == 0){
38 /* 按钮1,设置为100*100 */
39 bt[i]->setFixedSize(100, 100);
40 /* 在vBoxLayout添加按钮1 */
41 vBoxLayout->addWidget(bt[i]);
42 } else {
43 /* 按钮2~4,设置为60*60 */
44 bt[i]->setFixedSize(60, 60);
45 /* 在hBoxLayout添加按钮2~4 */
46 hBoxLayout->addWidget(bt[i]);
47 }
48 }
49 /* 在hBoxLayout添加水平间隔 */
50 hBoxLayout->addSpacerItem(hSpacer);
51
52 /* 在主布局里添加垂直布局 */
53 mainLayout->addLayout(vBoxLayout);
54 /* 在主布局里添加水平布局 */
55 mainLayout->addLayout(hBoxLayout);
56
57 /* 设置部件间距 */
58 mainLayout->setSpacing(50);
59 /* 将主布局设置为widget的布局 */
60 widget->setLayout(mainLayout);
61
62 }
63
64 MainWindow::~MainWindow()
65 {
66 }
在源文件“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.6.1.3运行效果
程序编译运行的结果如下,在垂直布局里添加了垂直空间间隔与按钮1,在水平布局里添加了按钮2~4与水平空间间隔。
图解如下:
7.7容器
容器(Containers)
各个控件的名称依次解释如下。
(1) Group Box:组框
(2) Scroll Area:滚动区域
(3) Tool Box:工具箱
(4) Tab Widget:标签小部件
(5) Stacked WIdget:堆叠小部件
(6) Frame:帧
(7) Widget:小部件
(8) MDI Area:MDI区域
(9) Dock Widget:停靠窗体部件
各种容器的解释如下:
QGroupBox继承QWidget。QGroupBox为构建分组框提供了支持。分组框通常带有一个边框和一个标题栏,作为容器部件来使用,在其中可以布置各种窗口部件。布局时可用作一组控件的容器,但是需要注意的是,内部通常使用布局控件(如QBoxLayout)进行布局。组框还提供键盘快捷方式,键盘快捷方式将键盘焦点移动到组框的一个子部件。
QScrollArea继承QAbstractScrollArea。滚动区域用于在框架中显示子部件的内容。如果小部件超过框架的大小,视图就会出现滚动条,以便可以查看子小部件的整个区域。
QToolBox继承QFrame。QToolBox类提供了一列选项卡小部件项。工具箱是一个小部件,它显示一列选项卡在另一列的上面,当前项显示在当前选项卡的下面。每个选项卡在选项卡列中都有一个索引位置。选项卡的项是QWidget。
QTabWidget继承QWidget。abWidget类提供了一组选项卡(多页面)小部件。QTabWidget主要是用来分页显示的,每一页一个界面,众多界面公用一块区域,节省了界面大小,很方便的为用户显示更多的信息。
QStackedWidget继承QFrame。QStackedWidget类提供了一个小部件堆栈,其中一次只能看到一个小部件,与QQ的设置面板类似。QStackedWidget可用于创建类似于QTabWidget提供的用户界面。它是构建在QStackedLayout类之上的一个方便的布局小部件。常与QListWidget搭配使用,效果如下图,左边的是QListWidget列表,右边的是QStackedWidget。他们一般与信号槽连接,通过点击左边的QListWidget列表,使用信号槽连接后,就可以让右边的QStackedWidget显示不同的内容,每次显示一个widget小部件。
QWidget类是所有用户界面对象的基类(如QLabel类继承于QFrame类,而QFrame类又继承于QWidget类)。Widget是用户界面的基本单元:它从窗口系统接收鼠标,键盘和其他事件,并在屏幕上绘制自己。每个Widget都是矩形的,它们按照Z-order进行排序。 注:Z-order是重叠二维对象的顺序,例如堆叠窗口管理器中的窗口。典型的GUI的特征之一是窗口可能重叠,使得一个窗口隐藏另一个窗口的一部分或全部。当两个窗口重叠时,它们的Z顺序确定哪个窗口出现在另一个窗口的顶部。理解:术语"z-order"指沿着z轴物体的顺序。三维坐标轴中x横轴,y数轴,z上下轴。可以将gui窗口视为平行与显示平面的一系列平面。因此,窗口沿着z轴堆叠。所以z-order指定了窗口的前后顺序。就像您桌面上的一叠纸一样,每张纸是一个窗口,桌面是您的屏幕,最上面的窗口z值最高。QWidget不是一个抽象类,它可以用作其他Widget的容器,并很容易作为子类来创建定制Widget。它经常用于创建、放置和容纳其他的Widget窗口。由上可知,QWidget一般用于容纳其他Widget窗口,其属性和方法相当的多,对于初学者,我们通常只用它来作可以容纳其他窗口的容器,还会用来接收鼠标,键盘和其他事件等。
QMdiArea继承QAbstractScrollArea。QMdiArea小部件提供一个显示MDI窗口的区域。
QMdiArea的功能本质上类似于MDI窗口的窗口管理器。大多数复杂的程序,都使用MDI框架,在Qt designer中可以直接将控件MDI Area拖入使用。
QDockWidget继承QWidget。QDockWidget类提供了一个小部件,可以停靠在QMainWindow内,也可以作为桌面的顶级窗口浮动。QDockWidget提供了停靠部件的概念,也称为工具面板或实用程序窗口。停靠窗口是放置在QMainWindow中央窗口附近的停靠窗口部件区域中的辅助窗口。停靠窗口可以被移动到当前区域内,移动到新的区域,并由终端用户浮动(例如,不停靠)。QDockWidget API允许程序员限制dock widget的移动、浮动和关闭能力,以及它们可以放置的区域。QDockWidget的初始停靠区域有Qt.BottomDockWidgetArea(底部停靠)、Qt.LeftDockWidgetArea(左边停靠、Qt.RightDockWidgetArea(右边停靠)、Qt.TopDockWidgetArea(顶部停靠)和Qt.NoDockWidgetArea(不显示Widget)。
在前面某些小节里已经有使用过本小节的控件,例如QWidget小部件。下面将上面列出的控件进行进一步的解释与运用。
7.7.1QGroupBox
7.7.1.1控件简介
QGroupBox小部件提供一个带有标题的组框框架。一般与一组或者是同类型的部件一起使用。
7.7.1.2用法示例
例33_qgroupbox,组框示例(难度:简单),使用3个QRadioButton单选框按钮,与QVBoxLayout(垂直布局)来展示组框的基本使用。
在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。
在头文件“mainwindow.h”具体代码如下。
mainwindow.h编程后的代码
1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3
4 #include <QMainWindow>
5 #include <QRadioButton>
6 #include <QGroupBox>
7 #include <QVBoxLayout>
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 QGroupBox *groupBox;
20 QVBoxLayout *vBoxLayout;
21 QRadioButton *radioButton[3];
22 };
23 #endif // MAINWINDOW_H
在源文件“mainwindow.cpp”具体代码如下。
mainwindow.cpp编程后的代码
1 #include "mainwindow.h"
2 #include <QList>
3
4 MainWindow::MainWindow(QWidget *parent)
5 : QMainWindow(parent)
6 {
7 /* 设置主窗体位置与大小 */
8 this->setGeometry(0, 0, 800, 480);
9 /* 以标题为“QGroupBox示例”实例化groupBox对象 */
10 groupBox = new QGroupBox(tr("QGroupBox示例"), this);
11 groupBox->setGeometry(300, 100, 300, 200);
12
13 vBoxLayout = new QVBoxLayout();
14
15 /* 字符串链表 */
16 QList <QString>list;
17 list<<"选项一"<<"选项二"<<"选项三";
18 for(int i = 0; i < 3; i++){
19 radioButton[i] = new QRadioButton();
20 radioButton[i]->setText(list[i]);
21 /* 在vBoxLayout添加radioButton */
22 vBoxLayout->addWidget(radioButton[i]);
23 }
24 /* 添加一个伸缩量1 */
25 vBoxLayout->addStretch(1);
26 /* vBoxLayout布局设置为groupBox布局 */
27 groupBox->setLayout(vBoxLayout);
28 }
29
30 MainWindow::~MainWindow()
31 {
32 }
在源文件“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.7.1.3运行效果
程序编译运行的结果如下,可以看到radioButton有规则的排布在groupBox组框里面。
相关推荐
- 得物可观测平台架构升级:基于GreptimeDB的全新监控体系实践
-
一、摘要在前端可观测分析场景中,需要实时观测并处理多地、多环境的运行情况,以保障Web应用和移动端的可用性与性能。传统方案往往依赖代理Agent→消息队列→流计算引擎→OLAP存储...
- warm-flow新春版:网关直连和流程图重构
-
本期主要解决了网关直连和流程图重构,可以自此之后可支持各种复杂的网关混合、多网关直连使用。-新增Ruoyi-Vue-Plus优秀开源集成案例更新日志[feat]导入、导出和保存等新增json格式支持...
- 扣子空间体验报告
-
在数字化时代,智能工具的应用正不断拓展到我们工作和生活的各个角落。从任务规划到项目执行,再到任务管理,作者深入探讨了这款工具在不同场景下的表现和潜力。通过具体的应用实例,文章展示了扣子空间如何帮助用户...
- spider-flow:开源的可视化方式定义爬虫方案
-
spider-flow简介spider-flow是一个爬虫平台,以可视化推拽方式定义爬取流程,无需代码即可实现一个爬虫服务。spider-flow特性支持css选择器、正则提取支持JSON/XML格式...
- solon-flow 你好世界!
-
solon-flow是一个基础级的流处理引擎(可用于业务规则、决策处理、计算编排、流程审批等......)。提供有“开放式”驱动定制支持,像jdbc有mysql或pgsql等驱动,可...
- 新一代开源爬虫平台:SpiderFlow
-
SpiderFlow:新一代爬虫平台,以图形化方式定义爬虫流程,不写代码即可完成爬虫。-精选真开源,释放新价值。概览Spider-Flow是一个开源的、面向所有用户的Web端爬虫构建平台,它使用Ja...
- 通过 SQL 训练机器学习模型的引擎
-
关注薪资待遇的同学应该知道,机器学习相关的岗位工资普遍偏高啊。同时随着各种通用机器学习框架的出现,机器学习的门槛也在逐渐降低,训练一个简单的机器学习模型变得不那么难。但是不得不承认对于一些数据相关的工...
- 鼠须管输入法rime for Mac
-
鼠须管输入法forMac是一款十分新颖的跨平台输入法软件,全名是中州韵输入法引擎,鼠须管输入法mac版不仅仅是一个输入法,而是一个输入法算法框架。Rime的基础架构十分精良,一套算法支持了拼音、...
- Go语言 1.20 版本正式发布:新版详细介绍
-
Go1.20简介最新的Go版本1.20在Go1.19发布六个月后发布。它的大部分更改都在工具链、运行时和库的实现中。一如既往,该版本保持了Go1的兼容性承诺。我们期望几乎所...
- iOS 10平台SpriteKit新特性之Tile Maps(上)
-
简介苹果公司在WWDC2016大会上向人们展示了一大批新的好东西。其中之一就是SpriteKitTileEditor。这款工具易于上手,而且看起来速度特别快。在本教程中,你将了解关于TileE...
- 程序员简历例句—范例Java、Python、C++模板
-
个人简介通用简介:有良好的代码风格,通过添加注释提高代码可读性,注重代码质量,研读过XXX,XXX等多个开源项目源码从而学习增强代码的健壮性与扩展性。具备良好的代码编程习惯及文档编写能力,参与多个高...
- Telerik UI for iOS Q3 2015正式发布
-
近日,TelerikUIforiOS正式发布了Q32015。新版本新增对XCode7、Swift2.0和iOS9的支持,同时还新增了对数轴、不连续的日期时间轴等;改进TKDataPoin...
- ios使用ijkplayer+nginx进行视频直播
-
上两节,我们讲到使用nginx和ngixn的rtmp模块搭建直播的服务器,接着我们讲解了在Android使用ijkplayer来作为我们的视频直播播放器,整个过程中,需要注意的就是ijlplayer编...
- IOS技术分享|iOS快速生成开发文档(一)
-
前言对于开发人员而言,文档的作用不言而喻。文档不仅可以提高软件开发效率,还能便于以后的软件开发、使用和维护。本文主要讲述Objective-C快速生成开发文档工具appledoc。简介apple...
- macOS下配置VS Code C++开发环境
-
本文介绍在苹果macOS操作系统下,配置VisualStudioCode的C/C++开发环境的过程,本环境使用Clang/LLVM编译器和调试器。一、前置条件本文默认前置条件是,您的开发设备已...
- 一周热门
- 最近发表
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- resize函数 (64)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- mybatis大于等于 (64)
- xcode-select (66)
- httperror403.14-forbidden (63)
- logstashinput (65)
- hadoop端口 (65)
- dockernetworkconnect (63)
- esxi7 (63)
- vue阻止冒泡 (67)
- c#for循环 (63)
- oracle时间戳转换日期 (64)
- jquery跨域 (68)
- php写入文件 (73)
- java大写转小写 (63)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)