4. Qt 模块¶
在前面的章节中,我们创建一个工程后,在.pro文件中都会有一句: QT += core gui
, 该语句添加了项目中使用的Qt模块。
Qt中存在模块化的概念,将众多功能细分到几个模块之中,大量的类根据功能分为各种模块,我们需要哪些功能就添加相关模块。
Qt5中模块分为基础模块(Essential Modules)、附加模块(Add-On Modules)、增值模块(Value-Add Modules)、还有一些Qt工具(Qt Tools), 在Qt6一些新版本中还有技术预览模块(Technical Preview)。
基础模块提供了Qt在所有平台上的基本功能;
附加模块是实现一些特定功能的提供附加价值的模块,这些模块可能仅在某些开发平台上可用;
增值模块是提供额外功能的模块或工具,在一些商业许可下提供;
Qt工具在所有受支持的开发平台上运行,有助于应用程序的开发和设计;
预览模块是一些处于开发阶段,但是可以作为技术预览使用的模块。
本章将简单介绍Qt框架下部分模块以及其他相关知识,详细的模块信息点击 这里 。
4.1. Qt 基础模块¶
基本模块是各平台通用的,一些模块的说明看下下面表格:
模块 |
说明 |
---|---|
Qt Core |
Qt框架的核心,是其他模块的基石,定义了其他模块使用的核心非图形类 |
Qt Gui |
图形用户界面 (GUI) 组件的基类,包括OpenGL |
Qt Multimedia |
音视频,相机和广播等功能 |
Qt Multimedia Widgets |
基于widgets类的多媒体功能 |
Qt Network |
网络相关的类 |
Qt QML |
一些QML和Javascript语言的类 |
Qt Quick |
用于构建具有自定义用户界面的高度动态应用程序的声明性框架 |
Qt Quick Controls |
创建桌面样式用户界面,基于 Qt Quick 的用户界面控件 |
Qt Quick Dialogs |
用于 Qt Quick 的系统对话框类型 |
Qt Quick Layouts |
用于 Qt Quick 2 界面元素的布局项 |
Qt Quick Test |
QML应用程序的单元测试框架 |
Qt SQL |
使用SQL用于数据库操作的类 |
Qt Test |
用于应用程序和库进行单元测试的类 |
Qt Widgets |
用于构建GUI界面C++图形组件类 |
使用Qt Creator创建的qmake项目,默认会在pro文件中添加core和gui模块。 要额外添加或者删除一些模块,只想要在.pro文件中修改即可,例如:
# 添加Qt Multimedia 和 Qt Multimedia Widgets模块
QT += multimedia multimediawidgets
# 不需要Qt Gui模块
QT -= gui
4.2. 附加模块¶
Qt的附加模块可以实现一些特定目的。 这些模块可能只在某些开发平台上有,或只能用于某些操作系统,或只是为了向后兼容,或者需要商业许可证,用户安装时可以选择性地安装这些附加模块。
下面列举一些常见的附加模块:
模块 |
描述 |
---|---|
Active Qt |
用于开发使用ActiveX和COM的Windows应用程序 |
Qt 3D |
支持2D和3D渲染,提供用于开发近实时的仿真系统,支持所有平台 |
Qt WebEngine |
提供类和函数,实现在应用程序中嵌入网页内容 |
Qt Charts |
用于数据显示的二维图表组件 |
Qt Virtual Keyboard |
实现不同输入法的虚拟键盘框架 |
提示
后面章节将介绍部分功能模块和各种界面组件。
4.3. Qt 宏定义¶
<QtGlobal>头文件中定义了很多宏,下面列出常见的Qt宏定义:
宏 |
描述 |
---|---|
QT_VERSION |
表示Qt版本,宏展开为数值形式 0xMMNNPP (MM = major, NN = minor, PP = patch) |
Q_UNUSED(name) |
用于在函数中定义不在函数体里使用的参数 |
Q_BYTE_ORDER |
表示系统内存中数据使用的字节序 |
foreach(variable, container) |
用于遍历容器的内容 |
qDebug(const char *message, …) |
用于在调试窗口显示信息,可以格式化输出各种数据 |
Q_FUNC_INFO |
函数信息宏,包含所在函数的属类和参数信息,一般配合qDebug使用,输出调试信息 |
Q_DECL_EXPORT/Q_DECL_EXPORT |
共享库的导出和导入 |
上面宏的具体使用参考下:https://doc.qt.io/qt-5/qtglobal.html#QT_VERSION
4.4. Qt NameSpace(命名空间)¶
命名空间是C++引入的可以由用户命名的作用域,用来处理程序中常见的同名冲突; C++中,命名空间使用namespace来声明,并使用{}来界定命名空间的作用域。
Qt中的使用namespace以及{}来界定命名空间的作用域, 例如我们使用Qt Creator创建一个带窗体的工程:
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
};
QT_BEGIN_NAMESPACE和QT_END_NAMESPACE是Qt的宏定义,用于启动命令空间的补充(Qt自己定义的命名空间), 它们之间的namespace Ui { class MainWindow; }定义了一个名为Ui的命名空间,并在其中声明了一个名为MainWindow的类。
这个命名空间是Qt的UI组件命名空间,用于表示Qt应用程序的用户界面组件。 MainWindow是Qt应用程序的主窗口类,它通常包含应用程序的主要功能和用户界面元素。
后面部分是定义MainWindow类(和UI中的MainWindow是不同的类,由于命名空间的不同),包含一个私有成员变量ui,该变量是一个指向Ui命名空间的MainWindow对象的指针。
这样通过namespace命名空间很好的解决了同名的函数的问题,而且把界面都给它隔开了,实现了Qt中界面与逻辑业务的分离。