目录
Qt QPA(Qt Platform Abstraction)插件的交互组件
3、Qt Add-Ons in Technical Preview(实验性功能)
5、Qt Platform Adaptation (QPA)(平台适配层)
一、QT整体组织架构
Qt组织形式四层说明图示:
1、操作系统层
Qt 支持的操作系统及其相关 API
操作系统类别 | 示例操作系统 | Qt 交互的 API 或相关技术 |
---|---|---|
桌面操作系统 | Windows(Win7/Win10/Win11)、macOS、Linux(Ubuntu、Fedora、Debian 等) | - 窗口系统 API:Windows API (Win32/UWP)、macOS Cocoa API、Linux Xlib/XCB API、Wayland 协议等 |
移动操作系统 | Android、iOS | - 窗口系统 API:Android SDK、iOS UIKit |
嵌入式操作系统 | QNX、嵌入式 Linux、Windows 的嵌入式版本 | - 针对嵌入式的定制 Qt 解决方案,如 Qt for Device Creation |
实时操作系统 (RTOS) | FreeRTOS、QNX RTOS | - 用于对时间有严格要求的应用,Qt 可在部分 RTOS 上运行(如通过 Qt for MCUs) |
Qt QPA(Qt Platform Abstraction)插件的交互组件
交互类别 | Qt 依赖的操作系统 API 或技术 | Qt 相关模块/插件 |
---|---|---|
窗口系统 API | Windows API (Win32/UWP), macOS Cocoa, Xlib/XCB, Wayland, Android SDK, iOS UIKit | QPA 插件,如 QWindowsIntegration、QCocoaIntegration、QXcbIntegration、QWaylandIntegration |
图形 API | Direct3D (Windows), Metal (macOS/iOS), OpenGL/Vulkan (跨平台) | Qt Quick Scene Graph、QOpenGLContext、QRhi(Qt Rendering Hardware Interface) |
输入设备驱动 | 操作系统的输入设备管理(键盘、鼠标、触摸屏等) | QPA 事件处理,QKeyEvent, QMouseEvent, QTouchEvent |
文件系统 API | 文件管理(Windows: Win32 API, Linux/macOS: POSIX) | QFile, QDir, QStandardPaths |
网络 API | Sockets、TCP/IP 协议栈 | QTcpSocket, QUdpSocket, QNetworkAccessManager |
线程 API | POSIX 线程(pthread)、Windows 线程 | QThread, QtConcurrent |
多媒体 API | Windows: DirectShow/Media Foundation, macOS/iOS: AVFoundation, Linux: GStreamer | Qt Multimedia (QMediaPlayer, QCamera) |
传感器 API | Android/iOS 传感器接口 | Qt Sensors, Qt Positioning |
调用示例:
Qt应用程序
-> Qt Multimedia 模块
-> (WMF 插件
) -> Windows Media Foundation API
-> Windows 系统/硬件驱动
WMF 插件(wmfengine.dll)本质上是 Qt Multimedia 和 Windows 系统 Media Foundation API 之间的桥梁,它使得 Qt 开发者能够使用统一的 Qt API 来利用 Windows 系统强大的多媒体能力。
2、跨平台插件层
这些接口通过 Qt Platform Abstraction (QPA) 架构与平台特定的插件协同工作,确保跨平台的可移植性和一致性。
Qt 跨平台接口的具体类别、相关类及其作用:
窗口系统
-
接口:QGuiApplication、QScreen
-
作用:提供窗口管理、屏幕信息获取以及 GUI 事件的分发功能。QGuiApplication 是 Qt GUI 应用程序的核心类,负责事件循环和窗口系统集成;QScreen 提供屏幕相关的属性和操作。
-
QPA 实现:通过插件如 qwindows(Windows)、qcocoa(macOS)、qxcb(Linux/X11)实现,与 QPlatformIntegration 协作。
图形渲染
-
接口:QOpenGLContext、QRhi
-
作用:封装多种图形 API(如 OpenGL、Vulkan、Metal、Direct3D),提供硬件加速渲染支持。QOpenGLContext 用于管理 OpenGL 上下文,QRhi 是一个更现代的渲染硬件接口,支持多种后端。
-
QPA 实现:通过插件如 qopengl、qvulkan、qmetal、qd3d11,结合 QPlatformOpenGLContext 或 QRhi 实现。
输入事件
-
接口:QKeyEvent、QMouseEvent、QTouchEvent
-
作用:处理键盘、鼠标和触摸屏的输入事件,确保应用程序能够跨平台一致地响应用户操作。
-
QPA 实现:通过插件如 qevdev(Linux)、qwindows(Windows)、qcocoa(macOS),结合 QPlatformInputContext 实现。
文件系统
-
接口:QFile、QDir、QStandardPaths
-
作用:提供对文件、目录和标准存储路径的访问,方便跨平台的文件操作。QFile 用于文件读写,QDir 用于目录操作,QStandardPaths 提供系统标准路径。
-
QPA 实现:通过插件如 qfsengine、qandroid、qcocoa,结合 QPlatformFileDialogHelper 实现。
网络通信
-
接口:QTcpSocket、QUdpSocket、QNetworkAccessManager
-
作用:处理 TCP/UDP 套接字通信以及 HTTP/HTTPS 请求,支持跨平台的网络功能。
-
QPA 实现:通过 qtnetwork 和 qtwebsockets 模块实现,核心功能由 QNetworkAccessManager 提供。
线程与并发
-
接口:QThread、QtConcurrent
-
作用:提供跨平台的线程管理和并行计算支持。QThread 用于创建和管理线程,QtConcurrent 提供高层次的并发工具。
-
QPA 实现:通过 qthread、qposix(POSIX 系统)、qwindows 等实现,与 QThreadPool 协作。
多媒体
-
接口:QMediaPlayer、QCamera
-
作用:支持音视频播放和摄像头访问,适用于跨平台的多媒体应用。
-
QPA 实现:通过插件如 wmfengine(Windows)、dsengine(DirectShow)、GStreamer(Linux)实现。
传感器与定位
-
接口:QSensor、QGeoPositionInfoSource
-
作用:获取传感器数据(如加速度计)和 GPS 位置信息,支持设备传感器功能。
-
QPA 实现:依赖底层平台支持,通常通过特定设备的插件实现。
跨平台处理QPA 及其相关接口
跨平台接口 | 作用 | QPA 插件 | Qt垮平台接口 |
---|---|---|---|
窗口系统 | 窗口管理、事件处理 | qwindows , qcocoa , qxcb , qwayland | QWindowsIntegration , QCocoaIntegration , QXcbIntegration |
图形 API | 硬件加速渲染,支持 OpenGL, Vulkan, Metal, Direct3D | qopengl , qvulkan , qmetal , qd3d11 | QPlatformOpenGLContext , QRhi |
输入设备 API | 处理键盘、鼠标、触摸输入 | qevdev , qwindows , qcocoa | QPlatformInputContext |
文件系统 API | 访问文件、目录、存储路径 | qfsengine , qandroid , qcocoa | QPlatformFileDialogHelper |
网络 API | 网络通信、套接字、HTTP/HTTPS 访问 | qtnetwork , qtwebsockets | QNetworkAccessManager |
线程 API | 提供多线程支持 | qthread , qposix , qwindows | QThread , QThreadPool |
多媒体 API | 播放音频、视频,访问摄像头 | wmfengine , dsengine , GStreamer | QMediaPlayer , QCamera |
Qt Platform Adaptation (QPA)
类别 | 组件名称 | 描述 |
---|---|---|
窗口系统集成 | QPlatformIntegration | 平台集成的根类,管理事件分发和窗口创建。 |
QPlatformAccessibility | 处理辅助功能,支持无障碍服务(如屏幕阅读器)。 | |
QPlatformBackingStore | 管理离屏缓冲区,优化窗口内容渲染。 | |
QPlatformClipboard | 处理剪贴板操作,支持跨应用数据传输。 | |
QPlatformCursor | 管理光标显示和行为,与平台样式一致。 | |
QPlatformDrag | 处理拖放操作,支持平台拖放机制。 | |
QPlatformFontDatabase | 管理字体数据库,确保使用平台可用字体。 | |
QPlatformGraphicsBuffer | 处理图形缓冲区管理,支持高效渲染。 | |
QPlatformInputContext | 管理输入法上下文,支持复杂文本输入。 | |
QPlatformOffscreenSurface | 处理离屏表面,用于非屏幕显示的渲染(如打印预览)。 | |
QPlatformOpenGLContext | 管理 OpenGL 上下文,支持硬件加速渲染。 | |
QPlatformScreen | 表示屏幕属性,提供分辨率、刷新率等信息。 | |
QPlatformServices | 提供平台特定服务,如访问原生 API。 | |
QPlatformSharedGraphicsCache | 管理共享图形缓存,优化资源使用。 | |
QPlatformSurface | 表面管理的基类,处理窗口或缓冲区通用接口。 | |
QPlatformWindow | 负责窗口系统集成,处理窗口创建、移动和关闭等操作。 | |
风格/主题 | QPlatformTheme | 处理平台主题集成,确保 UI 风格与平台匹配。 |
平台调色板 | 管理平台特定的颜色方案(如深色模式)。 | |
平台字体 | 管理平台特定的字体,使用系统默认字体渲染。 | |
主题提示 | 提供主题相关提示,支持自定义风格适配平台。 | |
原生对话框和菜单 | QPlatformDialogHelper | 协助实现原生对话框(如文件选择对话框)。 |
QPlatformMenu | 处理原生菜单实现,支持平台菜单样式和行为。 | |
QPlatformMenuBar | 管理原生菜单栏,确保与平台一致。 | |
QPlatformMenuItem | 处理单个菜单项实现,支持平台特定定制。 |
3、基础开发层
Qt Core:Qt 框架的基石
Qt Core
是 Qt 框架中最基础且必不可少的模块。它提供了所有其他 Qt 模块赖以构建的核心非 GUI 功能。几乎所有的模块都依赖于Qt Core,包括QPA接口。
跨平台性 (Cross-Platform Nature):
- 操作系统抽象: 它封装了不同操作系统提供的底层系统调用和 API,例如文件系统操作、线程管理、网络通信等,提供了一套平台无关的接口。
- 统一的数据类型和工具类: 它定义了一套跨平台的数据类型(例如
QString
、QList
、QMap
)和工具类,可以在所有支持的平台上一致地工作。 - 核心机制的跨平台实现: Qt 的核心机制,如事件循环、信号与槽机制、元对象系统等,都在
Qt Core
中实现,并且在不同平台上以一致的方式运行。
主要功能 (Functionalities):
- 基本数据类型和工具类 (字符串、容器、日期时间、动态数组、数学函数、随机数、JSON/XML基础支持)
- 核心对象模型 (对象模型、信号与槽、元对象系统)
- 事件处理 (事件循环、事件处理机制)
- 输入/输出和文件系统 (文件操作、目录操作、数据流)
- 线程和并发 (线程管理、并发编程工具)
- 时间和定时器 (定时器)
- 设置和配置 (应用程序设置管理)
- 国际化 (文本翻译和本地化支持)
- 插件支持 (创建和加载插件的框架)
- 调试和日志 (调试输出和日志记录)
- 网络基础 (基础网络相关类和概念)
基于平台适配层QPA
传统界面开发的模块
- Qt Widgets 模块
功能:提供构建传统桌面式用户界面的类,例如 QMainWindow(主窗口)、QPushButton(按钮)、QLabel(标签)、QTableWidget(表格)等。它是传统 GUI 开发的核心模块,适合创建经典的桌面应用程序界面。
作用:开发者通过 Qt Widgets 可以轻松创建和管理用户界面组件,如对话框、菜单栏和工具栏。
依赖:Qt Widgets 依赖 Qt GUI,因为它使用 Qt GUI 提供的绘图和事件处理功能;同时间接依赖 Qt Core,因为 Qt GUI 依赖 Qt Core。
- Qt GUI 模块
功能:提供图形用户界面(GUI)的基础功能,包括事件处理(如鼠标点击、键盘输入)、窗口管理、2D 图形绘制、字体和文本处理等。它是 Qt Widgets 的基础模块。
作用:为 Qt Widgets 提供底层支持,例如通过 QPainter 进行绘图,通过 QEvent 处理用户输入。
依赖:Qt GUI 依赖 Qt Core,因为它需要 Qt Core 提供的信号与槽机制、事件循环和对象管理功能。
- Qt Core 模块
功能:提供核心非 GUI 功能,包括信号与槽机制、事件系统、线程管理(QThread)、文件操作(QFile)、容器类(QList、QMap)等。它是整个 Qt 框架的基础模块。
作用:支持所有 Qt 模块的核心功能,是传统界面开发的基础。
依赖:Qt Core 无其他 Qt 模块依赖,是最底层的模块。
- 模块之间的关系Qt Widgets → Qt GUI → Qt Core
Qt Widgets 依赖 Qt GUI:Qt Widgets 是基于 Qt GUI 构建的,使用 Qt GUI 提供的窗口管理和事件处理功能。例如,QWidget 类继承自 Qt GUI 的功能来实现界面绘制和事件响应。
Qt GUI 依赖 Qt Core:Qt GUI 需要 Qt Core 提供的核心功能,如事件循环(QEventLoop)和信号与槽机制(QObject),来处理 GUI 事件和对象通信。
Qt Core 无依赖:作为基础模块,Qt Core 不依赖其他 Qt 模块,但所有模块都直接或间接依赖它。
- 以下是模块依赖关系的表格形式:
模块 | 依赖 | 说明 |
---|---|---|
Qt Widgets | Qt GUI, Qt Core | 提供传统桌面 UI 控件,依赖 GUI 渲染和 Core 基础功能 |
Qt GUI | Qt Core | 提供图形渲染和事件处理,依赖 Core 的对象模型和事件系统 |
Qt Core | 无 | 基础模块,提供信号与槽、事件循环等 |
非传统界面开发的模块
Qt 的非传统界面开发通常指使用 Qt Quick 进行用户界面设计,这是一种基于 QML(Qt Meta-object Language)语言的现代、灵活的 UI 开发方式。相较于传统的 Qt Widgets 开发,Qt Quick 更适合移动设备、嵌入式系统以及需要动态、流畅界面的桌面应用。以下将详细介绍涉及的主要模块、模块之间的关系,以及一个典型的开发流程。
Qt Quick 开发中涉及的主要模块如下:
- Qt Quick
功能:提供构建现代用户界面的核心功能,包括基本控件(如 Rectangle、Text)、布局管理、动画、状态机、触摸支持等。
作用:支持创建高度动态和响应式的用户界面,适合桌面、移动和嵌入式设备。
依赖:依赖 Qt QML 和 Qt GUI,因为它使用 QML 语言定义 UI,并需要 GUI 渲染支持。
- Qt QML
功能:提供 QML 语言的解析和执行环境。QML 是一种声明式语言,用于定义用户界面和交互逻辑。
作用:支持属性绑定、动态对象创建、信号与槽机制等,是 Qt Quick 的基础。
依赖:依赖 Qt GUI(用于渲染)和 Qt Core(提供基础功能如信号与槽)。
- Qt GUI
功能:为 Qt Quick 提供图形渲染和事件处理的基础支持,负责将 QML 描述的界面元素绘制到屏幕上。
作用:包括 2D 图形绘制、窗口管理、事件分发(如鼠标、键盘、触摸事件)等。
依赖:依赖 Qt Core,利用其对象模型、事件系统和线程管理功能。
- Qt Core
功能:Qt 框架的核心模块,提供基础功能,所有 Qt 模块都依赖于它。
作用:包括信号与槽机制、事件循环、线程管理、文件操作等,是所有模块的基础。
依赖:无其他 Qt 模块依赖,是最底层的模块。
- 模块之间的关系
依赖关系链可以简化为:Qt Quick → Qt QML → Qt GUI → Qt Core
-
Qt Quick 依赖 Qt QML 和 Qt GUI
Qt Quick 是基于 QML 构建的 UI 框架,使用 Qt QML 解析和执行 QML 代码,并依赖 Qt GUI 进行图形渲染和事件处理。例如,Qt Quick 中的 ApplicationWindow 需要 Qt GUI 来管理窗口。
-
Qt QML 依赖 Qt GUI 和 Qt Core
Qt QML 需要 Qt GUI 的图形功能来渲染界面元素(如文本、图像),同时依赖 Qt Core 的基础功能(如信号与槽、事件循环)来支持 QML 的动态行为。
-
Qt GUI 依赖 Qt Core
Qt GUI 利用 Qt Core 提供的对象模型(如 QObject)、事件系统(如 QEvent)和线程管理(如 QThread)等功能,确保图形界面的正常运行。
- 以下是模块依赖关系的表格形式:
模块 | 依赖 | 说明 |
---|---|---|
Qt Quick | Qt QML, Qt GUI, Qt Core | 提供现代 UI,依赖 QML 解析和 GUI 渲染 |
Qt QML | Qt GUI, Qt Core | 解析 QML 代码,依赖 GUI 渲染和 Core 基础功能 |
Qt GUI | Qt Core | 提供图形渲染和事件处理,依赖 Core 的对象模型和事件系统 |
Qt Core | 无 | 基础模块,提供信号与槽、事件循环等 |
非基于平台适配层QPA
QtNetwork
模块如何与操作系统交互
QtNetwork
的主要目标是提供一套跨平台的、易于使用的 API 来进行网络编程,而无需开发者直接面对不同操作系统复杂的网络编程接口。为了实现这一点,QtNetwork
在其内部构建了一个抽象层,这个抽象层负责将 Qt 的高级网络类(如 QTcpSocket
, QUdpSocket
, QNetworkAccessManager
等)的操作转化为底层操作系统能够理解的网络调用。
-
QtNetwork
- 提供高级网络类: 包含用于 TCP、UDP、HTTP、FTP 等协议的类,例如
QTcpSocket
(TCP 连接)、QUdpSocket
(UDP 通信)、QNetworkAccessManager
(高级网络请求管理) 等。 - 封装平台相关的网络操作:
QtNetwork
内部实现了针对不同操作系统的网络操作逻辑。它会根据当前运行的平台选择合适的后端实现来执行网络任务。 - 管理网络状态和事件: 负责跟踪网络连接的状态、处理接收到的数据、以及报告错误等。
- 提供异步操作机制: 许多网络操作(如连接、发送、接收)都是异步的,
QtNetwork
利用QtCore
的信号与槽机制来通知应用程序操作的结果。
QtNetwork
依赖于QtCore
- 对象模型:
QtNetwork
的类需要继承自QObject
,以便能够使用 Qt 的对象管理、内存管理和类型系统。 - 信号与槽:
QtNetwork
使用信号与槽进行异步通信和事件通知,这是QtCore
的核心特性。 - 事件循环:
QtNetwork
的非阻塞 I/O 和事件驱动模型依赖于QtCore
的事件循环来处理来自操作系统的网络事件。 - 平台抽象:
QtCore
提供的平台抽象层帮助QtNetwork
屏蔽了不同操作系统在某些底层细节上的差异。
- QtNetwork 与操作系统的交互方式:
QtNetwork
模块本身并不直接包含与所有操作系统进行交互的代码。相反,它依赖于操作系统提供的原生网络 API。QtNetwork
的实现会根据不同的操作系统选择性地调用这些 API。
Unix-like 系统 (Linux, macOS, etc.):
QtNetwork
的后端实现会使用标准的 POSIX sockets API。
当调用 QTcpSocket::connectToHost()
时,QtNetwork
内部会调用 socket()
系统调用创建一个套接字,然后调用 connect()
系统调用尝试连接。
发送数据时,会调用 send()
或 write()
系统调用。
接收数据时,会调用 recv()
或 read()
系统调用。
监听端口时(例如在 QTcpServer
中),会使用 bind()
和 listen()
系统调用。
接受连接时,会使用 accept()
系统调用。
QtNetwork
会使用非阻塞 I/O 和事件通知机制(例如 select()
或 poll()
或更现代的 epoll()
)来高效地处理多个套接字上的事件,并将其转化为 Qt 的信号。
Windows 系统:
QtNetwork
的后端实现会使用 Windows Sockets (Winsock) API。
Winsock 提供了与 POSIX sockets 类似的功能,但函数名称和使用方式可能略有不同(例如,需要初始化 Winsock 库)。
QtNetwork
会将 Qt 的网络类方法映射到相应的 Winsock 函数上,例如 socket()
, connect()
, send()
, recv()
, bind()
, listen()
, accept()
等。
Windows 也提供了事件通知机制(例如通过 WSAAsyncSelect()
或更高级的 I/O 完成端口 (IOCP))供 QtNetwork
使用,以实现异步网络操作和事件处理。
4、附加工具层
此部分依赖于基础库,或独立存在。
工具名称 | 作用 |
---|---|
Qt Creator | Qt 官方集成开发环境 (IDE),用于编写、调试、测试和部署 Qt 应用程序。 |
Qt Designer | 用于设计 Qt Widgets 界面的可视化工具,支持拖拽 UI 组件进行布局。 |
Qt Quick Designer | 专门用于 Qt Quick/QML 开发的 UI 设计工具,可直观调整 QML 界面。 |
Qt Design Studio | 一款高级 UI 设计和原型工具,专注于 Qt Quick,提供更强大的可视化编辑、动画制作和状态管理功能,通常用于创建复杂的用户界面和用户体验。 |
Qt Linguist | 用于国际化 Qt 应用,提供翻译管理功能,包含 Linguist 翻译器、lupdate(提取翻译文本)、lrelease(生成发布文件)。 |
Qt Assistant | 提供 Qt 文档的浏览和查询功能,方便开发者查阅 API。 |
Qt Virtual Keyboard | 提供可定制的虚拟键盘,适用于嵌入式系统。 |
Qt Charts | 用于创建数据可视化的图表组件,支持折线图、柱状图、饼图等。 |
Qt 3D Studio | 设计和开发 3D 用户界面的工具,适用于 Qt 3D 应用。 |
二、六大模块
1、Qt Essentials(基础模块)
这些模块是 Qt 的基础,确保核心功能的一致性。适用于所有平台,以下是具体模块及其功能:
模块名称 | 功能描述 |
---|---|
Qt Core | 提供核心非 GUI 功能,包括容器、线程管理、事件管理等,Qt Core模块。 |
Qt GUI | 提供基本的图形用户界面功能,适用于桌面应用,Qt GUI模块。 |
Qt Widgets | 扩展 Qt GUI,提供基于 C++ 的小部件功能,Qt Widgets 模块。 |
Qt Test | 提供单元测试功能,用于测试 Qt 应用和库(仅源代码兼容),Qt Test模块。 |
Qt Quick Test | 提供 Qt Quick 测试功能(仅源代码兼容)Qt Quick Test 模块。 |
Qt Quick | 提供嵌入 Qt Quick 的 C++ 类,Qt Quick 模块。 |
Qt Quick Controls | 提供 Qt Quick 控件的 C++ 接口,Qt Quick Controls 模块。 |
Qt Quick Widgets | 提供将 Qt Quick 集成到 C++ 应用中的功能,Qt Quick Widgets 模块。 |
2、Qt Add-Ons(附加模块)
这些模块提供特定功能,可能平台相关。以下是具体模块及其功能:
模块名称 | 功能描述 |
---|---|
Qt Bluetooth | 提供蓝牙操作,如设备扫描和连接,Qt Bluetooth 模块 |
Qt Charts | 提供图表 API,用于创建图表,Qt Charts 模块 |
Qt CoAP | 提供 CoAP 协议的类,用于物联网通信,Qt CoAP 模块 |
Qt Concurrent | 支持并发执行程序代码,Qt Concurrent 模块 |
Qt D-Bus | 提供基于 D-Bus 协议的进程间通信(仅 Unix),Qt D-Bus 模块 |
Qt Data Visualization | 提供数据可视化 API,Qt Data Visualization 模块 |
Qt HTTP Server | 提供 HTTP 服务器框架,Qt HTTP Server 模块 |
Qt Help | 提供在应用中集成在线文档的类,Qt Help 模块 |
Qt Location | 提供位置和导航信息的接口,Qt Location 模块 |
Qt Multimedia | 提供音频、视频和摄像头功能,Qt Multimedia 模块 |
Qt NFC | 提供 NFC 论坛标签访问 API,Qt NFC 模块 |
Qt Network | 提供网络编程的类,使其更易于移植,Qt Network 模块 |
Qt Network Authorization | 提供网络授权支持(如 OAuth),Qt Network Authorization 模块 |
Qt OpenGL | 提供 OpenGL 的 C++ 类,简化 OpenGL 在 Qt 中的使用,Qt OpenGL 模块 |
Qt Positioning | 提供位置信息的接口,Qt Positioning 模块 |
Qt Print Support | 提供打印功能,使其更易于移植,Qt Print Support 模块 |
Qt Qml | 提供 Qt Qml 模块的 C++ API,Qt Qml 模块 |
Qt Remote Objects | 提供在进程间共享 QObject 属性、信号和槽的机制,Qt Remote Objects 模块 |
Qt SCXML | 提供从 SCXML 文件创建和使用状态机的类,Qt SCXML 模块 |
Qt SQL | 提供 SQL 数据库的抽象层,支持 ODBC、SQLITE、MySQL、PostgreSQL 等,Qt SQL 模块 |
Qt SVG | 提供 SVG 图像处理功能,Qt SVG 模块 |
Qt Sensors | 提供传感器数据读取类,Qt Sensors 模块 |
Qt Serial Bus | 提供串行总线数据的读取和写入类,Qt Serial Bus 模块 |
Qt Serial Port | 提供串行端口访问的类,Qt Serial Port 模块 |
Qt Spatial Audio | 提供 3D 音频功能,Qt Spatial Audio 模块 |
Qt State Machine | 提供创建和执行状态图的类,Qt State Machine 模块 |
Qt TextToSpeech | 提供文本到语音引擎的 C++ API,Qt TextToSpeech 模块 |
Qt UI Tools | 提供处理 Qt Widgets Designer 创建的表单的类,Qt UI Tools 模块 |
Qt Virtual Keyboard | 提供虚拟键盘输入方法的类,Qt Virtual Keyboard 模块 |
Qt Wayland Compositor | 提供用于编写 Wayland 显示服务器的 C++ 类,Qt Wayland Compositor 模块 |
Qt WebChannel | 提供 WebSocket 通信的类,Qt WebChannel 模块 |
Qt WebEngine Core | 提供 Qt WebEngineQuick 和 QtWebEngineWidgets 共享的公共 API,Qt WebEngine Core 模块 |
Qt WebEngine Quick | 提供 Qt WebEngine 的 Qt Quick 接口,Qt WebEngine Quick 模块 |
Qt WebEngine Widgets | 提供基于 QWidget 的 Web 内容渲染类,Qt WebEngine Widgets 模块 |
Qt WebSockets | 提供 WebSocket 通信的类,Qt WebSockets 模块 |
Qt WebView | 提供 WebView 的设置和使用帮助函数,Qt WebView 模块 |
Qt XML | 提供 XML 的 C++ 实现,包括 DOM 和 SAX,Qt XML 模块 |
3、Qt Add-Ons in Technical Preview(实验性功能)
提供实验性功能,尚未完全稳定,例如:
Qt Location:提供位置和导航信息的接口,Qt Location 模块。
开发者可以试用这些模块并提供反馈。
4、Qt Extension Modules(扩展模块)
这些模块提供额外功能,可能在发布计划、平台支持或兼容性方面有所不同:
模块名称 | 功能描述 |
---|---|
Qt PDF | 提供 PDF 文档渲染功能,Qt PDF 模块 |
Qt 5 Core Compatibility | 包含 Qt 5 Core API,在 Qt 6 中移除,Qt 5 Core Compatibility 模块 |
QAxContainer | Windows 专用,访问 ActiveX 控件和 COM 对象,QAxContainer 模块 |
QAxServer | Windows 专用,将标准 Qt 二进制文件转为 COM 服务器,QAxServer 模块 |
Qt MQTT | 提供 MQTT 协议的类,用于消息发布和订阅,Qt MQTT 模块 |
Qt OPC UA | 提供 OPC UA 功能的 Qt API,Qt OPC UA 模块 |
Qt Widgets Designer | 提供创建自定义小部件插件的类,Qt Widgets Designer 模块 |
5、Qt Platform Adaptation (QPA)(平台适配层)
平台适配层,通过平台插件(如 qxcb、qwindows)实现跨平台支持。
窗口系统集成
-
核心类:QPlatformIntegration, QPlatformWindow
-
功能:
-
窗口创建与管理:通过 QPlatformWindow 创建和管理窗口,支持窗口的显示、移动、调整大小、关闭等操作。
-
事件分发:将底层操作系统的事件(如鼠标点击、键盘输入)分发到 Qt 的事件循环。
-
屏幕管理:通过 QPlatformScreen 提供屏幕属性(如分辨率、刷新率、多屏支持)。
-
实现插件:QWindowsIntegration(Windows)、QCocoaIntegration(macOS)、QXcbIntegration(Linux/X11)、QWaylandIntegration(Linux/Wayland)。
-
-
作用:确保 Qt 应用程序能够与平台的窗口系统无缝交互。
图形渲染支持
-
核心类:QPlatformOpenGLContext, QPlatformBackingStore, QPlatformOffscreenSurface
-
功能:
-
OpenGL 上下文管理:QPlatformOpenGLContext 提供硬件加速渲染的平台实现,支持 OpenGL。
-
离屏渲染:QPlatformBackingStore 管理窗口内容的离屏缓冲区,用于优化绘制性能;QPlatformOffscreenSurface 支持非屏幕渲染(如打印预览)。
-
图形缓冲区:QPlatformGraphicsBuffer 处理底层的图形缓冲区管理。
-
共享缓存:QPlatformSharedGraphicsCache 优化跨上下文的图形资源使用。
-
-
作用:支持跨平台的图形渲染,尤其是硬件加速功能,适配不同平台的图形 API。
输入事件处理
-
核心类:QPlatformInputContext, QPlatformCursor, QPlatformDrag
-
功能:
-
输入法支持:QPlatformInputContext 处理复杂输入(如多语言输入法),适配平台特定的输入机制。
-
光标管理:QPlatformCursor 控制光标的外观和行为,与平台样式一致。
-
拖放操作:QPlatformDrag 实现跨平台的拖放功能(如文件拖放)。
-
-
作用:统一处理键盘、鼠标、触摸屏等输入事件,确保输入体验一致。
主题与风格适配
-
核心类:QPlatformTheme
-
功能:
-
UI 风格:通过 QPlatformTheme 提供平台的主题信息(如按钮、滚动条的外观),与 QStyle 和 QStyleHint 协作。
-
调色板:管理平台特定的颜色方案(如 Windows 深色模式、macOS 系统颜色)。
-
字体:确保文本渲染使用平台的默认字体。
-
主题提示:提供开发者自定义风格的提示,适配平台特性。
-
-
作用:使 Qt 应用程序的外观和行为与目标平台保持一致,提升用户体验。
原生对话框与菜单
-
核心类:QPlatformDialogHelper, QPlatformMenu, QPlatformMenuBar, QPlatformMenuItem
-
功能:
-
对话框:QPlatformDialogHelper 调用平台的原生对话框(如文件选择、消息框)。
-
菜单:QPlatformMenu 和 QPlatformMenuBar 实现原生菜单和菜单栏,QPlatformMenuItem 处理单个菜单项。
-
-
作用:利用平台的原生 UI 组件,提升应用程序的集成度和熟悉感。
辅助功能支持
-
核心类:QPlatformAccessibility
-
功能:
-
提供对平台无障碍服务的支持(如屏幕阅读器)。
-
将 Qt 控件的信息暴露给辅助技术。
-
-
作用:确保应用程序符合无障碍标准,服务特殊用户群体。
剪贴板操作
-
核心类:QPlatformClipboard
-
功能:
-
处理跨应用程序的剪贴板数据传输。
-
支持文本、图像等多种数据格式。
-
-
作用:实现跨平台的剪贴板功能。
字体与文本渲染
-
核心类:QPlatformFontDatabase
-
功能:
-
管理平台的字体数据库。
-
确保文本渲染使用系统可用字体。
-
-
作用:统一跨平台的字体显示效果。
平台特定服务
-
核心类:QPlatformServices
-
功能:
-
提供对平台原生 API 或系统功能的访问。
-
例如打开 URL、调用系统通知等。
-
-
作用:增强 Qt 应用程序与平台的深度集成。
表面管理
-
核心类:QPlatformSurface
-
功能:
-
作为窗口和缓冲区的通用接口基类。
-
管理不同类型的渲染表面。
-
-
作用:为窗口和离屏渲染提供统一的抽象。
窗口系统集成
这些组件确保 Qt 与底层窗口系统集成,处理显示和交互功能:
类名 | 作用 |
---|---|
QPlatformIntegration | 核心平台集成,管理平台特定的初始化和功能。 |
QPlatformAccessibility | 处理辅助功能,支持屏幕阅读器等无障碍服务。 |
QPlatformBackingStore | 管理离屏缓冲区(backing store),用于优化窗口内容的渲染和更新。 |
QPlatformClipboard | 处理剪贴板操作,支持在应用程序之间复制和粘贴数据。 |
QPlatformCursor | 管理鼠标光标的显示和行为,确保与平台原生光标一致。 |
QPlatformDrag | 处理拖放操作,支持平台原生的拖放机制。 |
QPlatformFontDatabase | 管理系统中可用的字体数据库,确保文本渲染时能够正确加载和使用字体。 |
QPlatformGraphicsBuffer | 处理图形缓冲区,用于存储和管理图像数据,优化图形性能。 |
QPlatformInputContext | 管理输入法上下文,处理文本输入,支持多语言输入和复杂的输入法。 |
QPlatformOffscreenSurface | 处理离屏表面(off-screen surface),用于在没有物理屏幕的情况下进行渲染,例如用于后台处理或测试。 |
QPlatformOpenGLContext | 管理 OpenGL 上下文,提供与底层图形硬件的接口,支持硬件加速的 2D 和 3D 图形渲染。 |
QPlatformScreen | 表示物理屏幕的属性信息,例如分辨率、像素密度、可用区域等,提供显示相关的接口。 |
QPlatformServices | 提供访问操作系统特定服务的接口,例如打开 URL、发送邮件等原生 API 的调用。 |
QPlatformSharedGraphicsCache | 管理共享的图形缓存,用于在多个窗口或应用程序之间共享图形资源,优化内存使用。 |
QPlatformSurface | 表面管理的基类,代表一个可以绘制内容的表面,例如窗口或离屏缓冲区。 |
QPlatformWindow | 通过 QWindow 类处理窗口系统的集成,负责窗口的创建、管理和事件处理。 |
风格/主题
QPlatformTheme:处理平台主题集成,确保外观一致。
-
平台调色板:管理平台颜色方案,确保颜色匹配。
-
平台字体:管理平台字体,确保文本渲染规范。
-
主题提示:提供主题相关提示,支持自定义风格。
原生对话框和菜单
这些类使 Qt 能够使用平台的原生 UI 组件,提升用户体验:
类名 | 作用 |
---|---|
QPlatformDialogHelper | 协助实现操作系统原生的对话框,例如文件选择对话框、颜色选择对话框等。 |
QPlatformMenu | 处理操作系统原生的菜单(例如上下文菜单),确保其外观和行为与平台一致。 |
QPlatformMenuBar | 管理应用程序窗口的原生菜单栏,确保其外观和功能与平台匹配。 |
QPlatformMenuItem | 处理原生菜单栏或菜单中的单个菜单项,允许进行平台特定的定制和配置。 |
插件与平台支持
QPA 用于抽象平台特定的窗口系统和输入设备,通过插件实现对不同平台的支持。官方文档列出了多个插件,例如:
插件名称 | 插件类名 | 描述 |
---|---|---|
qandroid | QAndroidPlatformIntegration | Android 支持 |
qbsdfb | QBsdFbIntegration | BsdFb 支持 |
qcocoa | QCocoaIntegrationPlugin | macOS 支持 |
qdirect2d | QWindowsDirect2DIntegrationPlugin | Direct2D 支持(用于 QPixmap 和 QBackingStore) |
qdirectfb | QDirectFbIntegrationPlugin | DirectFB 支持 |
qeglfs | QEglFSIntegrationPlugin | 嵌入式 Linux 的 EGLFS 支持 |
qhaiku | QHaikuIntegration | Haiku 支持 |
qios | QIOSIntegrationPlugin | iOS 支持 |
qlinuxfb | QLinuxFbIntegrationPlugin | 嵌入式 Linux 的 LinuxFB 支持 |
qvnc | QVncIntegration | VNC 支持 |
qwayland | Multiple (e.g., QWaylandIntegrationPlugin) | Wayland 支持 |
qwindows | QWindowsIntegrationPlugin | Windows 支持 |
qxcb | QXcbIntegrationPlugin | X Window System (X11) 支持 |
这些插件通过子类化 QPlatform* 类实现具体功能,例如 qminimal 插件用于不需要窗口系统集成的工具(如 qmlplugindump),并支持通过环境变量将窗口内容转储为图像。
6、Qt Development Tools(开发工具)
提供开发工具,包括:
工具名称 | 作用 |
---|---|
集成开发环境 (IDE) | |
Qt Creator | Qt 官方集成开发环境 (IDE),用于编写、调试、测试和部署 Qt 应用程序。 |
用户界面设计工具 | |
Qt Designer | 用于设计 Qt Widgets 界面的可视化工具,支持拖拽 UI 组件进行布局。 |
Qt Quick Designer | 专门用于 Qt Quick/QML 开发的 UI 设计工具,可直观调整 QML 界面。 |
Qt Design Studio | 一款高级 UI 设计和原型工具,专注于 Qt Quick,提供更强大的可视化编辑、动画制作和状态管理功能,通常用于创建复杂的用户界面和用户体验。 |
构建工具 | |
qmake | Qt 自带的构建工具,生成 Makefile 以编译项目。 |
CMake | 支持 Qt 开发的 CMake 构建系统,更加通用,与现代 C++ 项目兼容性更好。 |
元对象编译器 & 资源编译器 & UI 编译器 | |
moc (Meta-Object Compiler) | Qt 的元对象编译器,用于处理包含 Q_OBJECT 宏的 C++ 类,生成实现信号与槽、属性系统、元对象系统等 Qt 特性的代码。 |
rcc (Resource Compiler) | Qt 的资源编译器,用于将应用程序所需的资源文件(如图标、图片、UI 文件等)打包到可执行文件中。 |
uic (User Interface Compiler) | Qt 的用户界面编译器,用于将 Qt Designer 创建的 .ui 文件转换为 C++ 代码。 |
国际化 (i18n) 工具 | |
Qt Linguist | 用于国际化 Qt 应用,提供翻译管理功能,包含 Linguist 翻译器、lupdate(提取翻译文本)、lrelease(生成发布文件)。 |
lupdate | (Qt Linguist 的一部分) 用于从 Qt 源代码中提取出需要翻译的文本,生成 .ts 文件。 |
lrelease | (Qt Linguist 的一部分) 用于将翻译人员编辑好的 .ts 文件转换为应用程序可以加载的 .qm 文件。 |
调试和性能分析工具 | |
Qt Debugging Tools | 提供调试 Qt 应用的工具,如 QML Profiler、GammaRay、Valgrind 等。 |
tracegen | 用于生成 Qt 跟踪事件,帮助分析应用程序性能和行为。 |
qmlcachegen | 用于提前生成 QML 模块的缓存,提高 Qt Quick 应用程序的启动速度。 |
qmlplugindump | 用于检查 QML 插件内容。 |
测试工具 | |
Qt Test | Qt 的单元测试框架,用于测试 Qt C++ 代码的正确性。 |
Qt Test Runner | 用于运行 Qt Test 编写的单元测试。 |
部署工具 | |
Qt Installer Framework | 用于创建跨平台安装包,支持 Windows、Linux、macOS 安装程序。 |
Qt Deploy Tool | (通常集成在构建过程中) 用于将 Qt 应用程序及其依赖打包在一起,方便部署。 |
帮助文档 | |
Qt Assistant | 提供 Qt 文档的浏览和查询功能,方便开发者查阅 API。 |
其他工具 | |
Qt Virtual Keyboard | 提供可定制的虚拟键盘,适用于嵌入式系统。 |
Qt Charts | 用于创建数据可视化的图表组件,支持折线图、柱状图、饼图等。 |
Qt 3D Studio | 设计和开发 3D 用户界面的工具,适用于 Qt 3D 应用。 |
Qt for Python (PySide6) | 提供 Qt for Python 的支持,允许使用 Python 编写 Qt 应用(虽然是 Python 支持,但通常被认为是 Qt 的开发工具之一)。 |