文章目录
- QT的工程文件.pro文件
-
- QT5中的基本模块
-
- [Qt Core](#Qt Core)
- [Qt GUI](#Qt GUI)
- [Qt Widgets](#Qt Widgets)
- [Qt QML](#Qt QML)
- [Qt Quick](#Qt Quick)
- [Qt Network](#Qt Network)
- [Qt SQL](#Qt SQL)
- [Qt Multimedia](#Qt Multimedia)
- [Qt Concurrent](#Qt Concurrent)
- [Qt WebEngine](#Qt WebEngine)
- [Qt TestLib](#Qt TestLib)
- [TARGET 可选择的模版](#TARGET 可选择的模版)
- CONFIG的配置项
QT的工程文件.pro文件
每一个QT项目都至少有一个.pro文件,用来配置项目中的一些基本信息,比如声明项目中使用到了哪些模块、拥有哪些头文件与源文件、采用C++11还是C++14标准等。

| 配置项 | 含义 |
|---|---|
| QT | 指定项目中需要使用到的所有模块。 |
| greaterThan(QT_MAJOR_VERSION, 4): QT += widgets | 如果QT版本大于4,则需要添加widgets模块,该模块包含所有控件类。 |
| TARGET | 程序运行成功之后生成的可执行文件名,用=连接。 |
| TEMPLATE | 指定如何运行当前程序,默认值为app,表示当前程序是一个应用程序,可以直接编译、运行。常用的值还有lib,表示将当前程序编译成库文件。 |
| DEFINES | 宏定义。 |
| SOURCES | 指定项目中所包含的源文件,如果未在这里声明,该文件将不参与编译。 |
| HEADERS | 指定项目中所包含的头文件,如果未在这里声明,该文件将不参与编译。 |
| FORMS | 指定项目中所包含的ui文件,如果未在这里声明,该文件将不参与编译。 |
| INCLUDEPATH | 指指定头文件的存储路径。 |
| CONFIG | 项目的一些基础配置。 |
QT5中的基本模块
Qt Core
核心功能,提供 Qt 框架的基础设施,不依赖于图形用户界面。
关键类/功能:
QObject: Qt 对象模型的基石,提供对象树管理、信号槽机制、事件处理。
QCoreApplication: 非 GUI 应用程序的核心应用类。
QString, QByteArray, QVariant: 强大的字符串和数据处理类。
QFile, QDir, QFileInfo: 文件和目录操作。
QSettings: 平台无关的应用程序设置持久化。
QTimer: 定时器。
QThread, QMutex, QWaitCondition: 多线程支持。
QEventLoop, QAbstractEventDispatcher: 事件循环机制。
容器类:QList, QVector, QMap, QHash, QSet 等(通常优先于 STL 容器,因与 Qt 框架集成更好)。
元对象系统 (Meta-Object System):提供运行时类型信息、信号槽、属性系统等。
Qt GUI
核心 GUI 功能,提供窗口系统集成、事件处理、OpenGL 和 OpenGL ES 集成、2D 图形、基本图像处理、字体和文本绘制等。是所有 GUI 相关模块的基础。
关键类/功能:
QGuiApplication: GUI 应用程序的核心应用类(不包含 Widgets)。
QWindow: 表示屏幕上的一个基本窗口。
QScreen: 访问屏幕信息。
QOpenGLContext, QOpenGLFunctions: OpenGL 支持。
QImage, QPixmap, QPainter: 图像处理、像素图绘制和 2D 绘图引擎(QPainter 是核心)。
QFont: 字体处理。
输入事件 (QMouseEvent, QKeyEvent 等)。
剪贴板 (QClipboard)。
Qt Widgets
传统桌面 UI 组件, 提供一套丰富的、可样式化的、基于 CPU 渲染的 UI 控件(按钮、文本框、列表、表格、菜单、工具栏、对话框等),用于构建经典的桌面风格应用程序。
关键类/功能:
QApplication: 基于 Widgets 的应用程序的核心应用类(继承自 QGuiApplication)。
QWidget: 所有 UI 控件的基类(继承自 QWindow 和 QObject)。
QLabel, QPushButton, QLineEdit, QTextEdit, QComboBox, QListView, QTableView, QTreeView, QMainWindow, QDialog, QMenu, QToolBar 等:大量的预构建控件。
布局管理 (QLayout, QHBoxLayout, QVBoxLayout, QGridLayout, QFormLayout)。
样式表 (QStyle, Qt Style Sheets - QSS):用于自定义控件外观。
模型/视图框架 (QAbstractItemModel, QAbstractItemView):用于分离数据与显示。
Qt QML
QML 引擎和语言基础设施,提供运行 QML 文档的引擎、语言支持、基本类型和 QML 与 C++ 集成的基础设施。
关键类/功能:
QQmlEngine: 执行 QML 代码的环境。
QQmlComponent: 封装一个 QML 组件定义。
QQmlContext: 为 QML 组件提供作用域上下文。
QQmlApplicationEngine: 简化加载 QML 应用主文件的引擎。
QQuickView: 用于在窗口中显示 QML 场景的便捷类(通常用于快速原型或简单应用)。
qmlRegisterType(): 将 C++ 类型注册到 QML 系统中。
Qt Quick
声明式 UI 框架: 建立在 QML 和 Qt GUI 之上,提供了一套用于构建现代、流畅、动画丰富的用户界面的 QML 类型。通常利用硬件加速(如 OpenGL)进行渲染。
关键类/功能:
QQuickItem: 所有 Qt Quick 可视项(如 Rectangle, Text, Image, MouseArea)的基类(在 QML 中)。
QQuickWindow: 渲染和管理 Qt Quick 场景的专用窗口。
丰富的可视元素:Rectangle, Text, Image, BorderImage, AnimatedImage, ListView, GridView, PathView, TableView 等。
交互元素:MouseArea, MultiPointTouchArea, KeyNavigation 等。
状态和转换:State, Transition。
动画框架:PropertyAnimation, NumberAnimation, SequentialAnimation, ParallelAnimation 等 (Behavior, State 也依赖于此)。
粒子系统 (ParticleSystem)。
Canvas: 提供类似 HTML5 Canvas 的绘图 API。
Qt Network
网络功能: 提供用于 TCP/IP 客户端-服务器编程、UDP、HTTP、WebSockets、网络代理、网络会话管理等的类。
关键类/功能:
QTcpSocket, QTcpServer: TCP 通信。
QUdpSocket: UDP 通信。
QNetworkAccessManager, QNetworkRequest, QNetworkReply: 高级 HTTP/FTP 请求处理(支持 REST API 调用、文件下载上传)。
QNetworkProxy: 网络代理配置。
QNetworkConfigurationManager, QNetworkSession: 管理网络连接和会话。
QWebSocket: WebSocket 协议支持。
Qt SQL
数据库集成: 提供统一的 API 来连接和操作各种 SQL 数据库。
关键类/功能:
QSqlDatabase: 表示一个数据库连接。
QSqlQuery: 执行 SQL 语句和遍历结果集。
QSqlTableModel, QSqlQueryModel: 用于将数据库数据方便地展示在 QTableView 或 QListView 等视图中的模型类。
驱动:支持 SQLite, MySQL, PostgreSQL, ODBC, Oracle 等(部分驱动可能需要额外插件)。
Qt Multimedia
多媒体功能: 提供访问音频、视频播放、录音、摄像头和收音机功能的 API。
关键类/功能:
QMediaPlayer: 播放音频和视频文件。
QAudioOutput, QAudioInput: 低级音频播放和录音。
QCamera: 访问摄像头设备。
QVideoWidget, QGraphicsVideoItem: 显示视频内容(分别用于 Widgets 和 QML/Quick)。
QSoundEffect: 播放低延迟音效。
QAudioRecorder: 高级音频录音。
Qt Concurrent
高级多线程 API: 提供易于使用的、基于高级操作的 API(如 map, filter, reduce)来编写多线程程序,简化并行处理,避免直接使用低级线程原语。
关键类/功能:
QtConcurrent::run(): 在单独线程中运行函数。
QtConcurrent::map(), filter(), filtered(), filteredReduced(), mapped(), mappedReduced(): 对容器元素进行并行处理。
QFuture, QFutureWatcher: 用于监控异步计算的结果和状态。
Qt WebEngine
Qt WebEngine 是 Qt 框架提供的现代 Web 浏览器引擎集成模块,基于 Chromium(Google Chrome 和 Microsoft Edge 使用的开源浏览器引擎)。它允许开发者在 Qt 应用程序中嵌入完整的 Web 浏览器功能,支持 HTML5、CSS3、JavaScript 和现代 Web API。
关键类/功能:
QWebEnginePage:代表一个网页,处理页面加载、导航、JavaScript 执行等。
QWebEngineView(Widgets)或 WebEngineView(QML):用于显示网页内容的视图组件。
QWebEngineProfile:管理浏览器配置(如缓存、Cookie、HTTP 头等)。
QWebEngineSettings:控制 Web 引擎行为(如启用 JavaScript、禁用图片等)。
QWebEngineView:继承自 QWidget,用于在 Widgets 应用中显示网页。
QWebEnginePage:管理单个网页的加载和交互。
QWebEngineProfile:管理浏览器会话(如缓存、Cookie、用户代理)。
WebEngineView:用于在 QML 中显示网页。
WebEngineProfile:管理 Web 配置(如存储位置、HTTP 头)。
WebEngineSettings:控制 Web 行为(如是否允许 JavaScript)。
Qt TestLib
Qt TestLib 是 Qt 框架内置的单元测试框架(通常简称为 Qt Test),它提供了一套完整的工具用于编写和运行 C++ 单元测试、GUI 测试和性能基准测试。它是 Qt 官方推荐的测试解决方案,特别适合 Qt 应用程序和库的自动化测试。
关键类/功能:
单元测试:验证函数、类和模块的逻辑正确性。
GUI 测试:模拟鼠标/键盘事件,测试 Qt Widgets 和 Qt Quick 界面。
基准测试(Benchmarking):测量代码执行时间,优化性能。
数据驱动测试(Data-Driven Testing):用多组输入数据运行同一测试逻辑。
异常测试:检查代码是否按预期抛出异常。
信号/槽测试:验证信号是否正确触发和连接。
TARGET 可选择的模版
| 选项 | 含义 |
|---|---|
| app | 建⽴⼀个应⽤程序的 makefile,默认项。 |
| lib | 建⽴⼀个库的 makefile。 |
| vcapp | 建⽴⼀个应⽤程序的VisualStudio项⽬⽂件。 |
| vclib | 建⽴⼀个库的VisualStudio项⽬⽂件。 |
| subdirs | 这是⼀个特殊的模板,它可以创建⼀个能够进⼊特定⽬录的makefile并且为它调⽤make的makefile。 |
CONFIG的配置项
| 选项 | 含义 |
|---|---|
| release | 项目以release模式构建。 |
| debug | 项目以debug模式构建。 |
| debug_and_release | 项目准备以debug和release两种模式构建。 |
| debug_and_release_target | 默认设置。如果也指定了debug_and_release,最终的debug和release构建在不同的目录。 |
| build_all | 指定了debug_and_release后,该项目会构建为debug和release模式。 |
| autogen_precompile_source | 自动生成一个.cpp文件,包含在.pro中指定的预编译头文件。 |
| ordered | 使用subdirs模板时,此选项指定应该按照目录列表的顺序处理它们。 |
| precompile_header | 可以在项目中使用预编译头文件的支持。 |
| warn_on | 编译器应该输出尽可能多的警告。 |
| warn_off | 编译器应该输出尽可能少的警告。 |
| exceptions | 启用异常支持。默认设置。 |
| exceptions_off | 禁用异常支持。 |
| rtti | 编启用RTTI支持。 |
| rtti_off | 禁用RTTI支持。 |
| stl | 启用STL支持。 |
| stl_off | 禁用STL支持。 |
| thread | 启用线程支持。当CONFIG包括qt时启用,这是缺省设置。 |
| c++11 | 启用c++11支持。 |
| c++14 | 启用c++14支持。 |
QT推荐的命名规范
类名:⾸字⺟⼤写,单词和单词之间⾸字⺟⼤写;
函数名及变量名:⾸字⺟⼩写,单词和单词之间⾸字⺟⼤写;