前言
上一章通过一个“Hello World”实例,演示了在Qt Creator里创建应用程序、设计窗体界面、编译和运行程序的主要功能。本节将继续深入地介绍QtCreator设计GUI应用程序的基本方法。
1、Qt创建的应用程序项目的基本组织结构;
2、可视化设计的UI界面文件的原理和运行机制;
3、信号与槽的使用方法;
4、窗体可视化设计的底层原理;
5、应用程序的窗体、组件布局、菜单、工具栏、Actions等常见设计元素的使用方法。
UI文件设计与运行机制
1、项目组成文件
在Qt Creator中新建一个Widget Application项目sample,在选择窗口基类的页面选择QWidget作为窗体基类,并选中
“Generate form”复选框。创建后的项目文件目录树如下图所示。
这个项目包含以下一些文件。
(1)、项目组织文件sample.pro, 存储项目设置的文件。
(2)、主程序入口文件main.cpp,实现main()函数的程序文件。
(3)、窗体界面文件widget.ui,一个XML格式存储的窗体上的元件及其布局的文件。
(4)、widget.h 是所设计的窗体类的头文件,widget.cpp 是widget.h里定义类的实现文件在C++里,任何窗体或界面组件 都是用类封装的,一个类一般有一个头文件(.h 文件)和一个源程序文件(.cpp 文件)。
2、项目管理文件
后缀为“.pro” 的文件是项目的管理文件,文件名就是项目的名称,如本项目中的sample.pro。下面是sample.pro文件的内容。
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp \
mainwindow.cpp
HEADERS += \
mainwindow.h
FORMS += \
mainwindow.ui
项目管理文件用于记录项目的一些设置,以及项目包含文件的组织管理。
“Qt += core gui"表示项目中加入core gui模块。core gui是Qt用于GUI设计的类库模块,
如果创建的是控制台(Console)应用程序,就不需要添加coregui。Qt类库以模块的形式组织各种功能的类,根据项目涉
及的功能需求,在项目中添加适当的类库模块支持。例如,如果项目中使用到了涉及数据库操作的类就需要用到sql模
块,在pro文件中需要增加如下一行:
QT +=SQL
3、界面文件
后缀为“.ui"的文件是可视化设计的窗体的定义文件,如widget.ui。双击项目文件目录树中的文件widget.ui,会打开一个集
成在Qt Creator中的Qt Designer对窗体进行可视化设计,如下图所示。
上图中的UI设计器有以下一些功能区域。
(1)、组件面板。 窗口左侧是界面设计组件面板,分为多个组,如Layouts、Buttons、 Display Widgets等,界面设计的常见组件都可以在组件面板里找到。
(2)、中间主要区域是待设计的窗体。如果要将某个组件放置到窗体上时,从组件面板上拖放一个组件到窗体.上即可。例如,先放一个Label和一个Push Button到窗体上。
(3)、Signals和Slots 编辑器与Action编辑器是位于待设计窗体下方的两个编辑器。Signals和Slots编辑器用于可视化地进行信号与槽的关联,Action编辑器用于可视化设计Action。
(4)、布局和界面设计工具栏。窗口上方的一个工具栏,工具栏上的按钮主要实现布局和界面设计。
(5)、对象浏览器(Object Inspector)。 窗口右上方是Object Inspector, 用树状视图显示窗体上各组件之间的布局包含关系,视图有两列,显示每个组件的对象名称(ObjectName) 和类名称。
(6)、属性编辑器(PropertyEditor)。窗口右下方是属性编辑器,是界面设计时最常用到的编辑器。属性编辑器显示某个选中的组件或窗体的各种属性及其取值,可以在属性编辑器里修改这些属性的值。
设置组件属性
在上图显示的设计窗体上,放置–个Label和一个PushButton组件,它们的主要属性设置见下表。
ObjectName | 类名称 | 属性设置 | 备注 |
---|---|---|---|
LabDemo | QLabel | Text=“TextTabel” Font.PointSize=30 | 设置标签的显示文字和字体大小 |
BtnClose | QPushButton | Text=“Close” | 设置按钮的文本 |
信号与槽
编辑完属性之后,再为btnClose按钮增加一个功能,就是单击此按钮时,关闭窗口,退出程序。使用Signals和Slots编
辑器完成这个功能,如图2-4所示。在信号与槽编辑器的工具栏上单击“Add”按钮,在出现的条目中, Sender选btnClose,
Signal选择clicked), Receiver 选择窗体Widget, Slot 选择close()。 这样设置表示当按钮btnClose被单击时,就执行
Widget的close()函数,实现关闭窗口的功能。然后对项目进行编译和运行,可以出现如图2-5所示的窗口,单击“Close”
按钮可以关闭程序。标签的文字内容和字体被修改了,窗口标题也显示为所设置的标题。
4、主函数文件
main.cpp是实现main()主函数的文件,下面是main.cpp文件的内容。
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv); //定义并创建应用程序
MainWindow w; //定义并创建窗口
w.show(); //显示窗口
return a.exec(); //应用程序运行
}
main()函数是应用程序的入口。它的主要功能是创建应用程序,创建窗口,显示窗口,并运行应用程序,开始应用程序
的消息循环和事件处理。QApplication是Qt的标准应用程序类,第1行代码定义了一个QApplication类的实例a,就是应
用程序对象。然后定义了一个Widget类的变量w,Widget 是本实例设计的窗口的类名,定义此窗口后再用w.show显示
此窗口。.最后一行用a.exec()启动应用程序的执行,开始应用程序的消息循环和事件处理。