Qt GUI 概述
Qt GUI 模块提供了用于窗口系统集成、事件处理、OpenGL和OpenGL ES集成、2D图形、基础图像处理、字体以及文本处理的类。这些类被Qt的用户界面技术内部使用,但也可以直接使用,例如用于编写使用低级OpenGL ES图形API的应用程序。
对于编写用户界面的应用程序开发人员,Qt 提供了诸如Qt Quick 之类的高级 API,这些 API 比Qt GUI 模块中的支持类要合适得多。
应用程序窗口
Qt GUI 模块中最重要的类是QGuiApplication 和QWindow 。任何希望在屏幕上显示内容的 Qt 应用程序都必须使用这些类。QGuiApplication 包含主事件循环,所有来自窗口系统及其他来源的事件均在此处进行处理和分发。它还负责处理应用程序的初始化和终结。
QWindow 类代表底层窗口系统中的一个窗口。它提供了一系列虚拟函数,用于处理来自窗口系统的事件(QEvent ),例如触摸输入、可见状态、焦点、按键操作以及几何形状变化。
2D 图形
Qt GUI 模块包含用于2D图形、图像处理、字体和高级排版的类。
使用QSurface::RasterSurface 表面类型创建的QWindow 可以与QBackingStore 和QPainter 结合使用,后者是Qt高度优化的2D矢量图形API。QPainter 支持绘制直线、多边形、矢量路径、图像和文本。有关更多信息,请参阅“绘图系统”和“光栅窗口示例”。
Qt 可通过QImage 和QPixmap 类加载和保存图像。默认情况下,Qt 支持包括 JPEG 和 PNG 在内的最常见的图像格式。用户可以通过QImageIOPlugin 类添加对其他格式的支持。有关更多信息,请参阅“读取和写入图像文件”。
Qt 中的排版由 `QTextDocument` 负责,该类结合使用了 `QPainter ` API 以及 Qt 的字体类(主要是 `QFont`)。如果应用程序更倾向于使用更底层的 API 来处理文本和字体,可以使用 `QRawFont ` 和 `QGlyphRun` 等类。
RHI 图形
Qt 渲染硬件接口(RHI Graphics)是对硬件加速图形 API(例如OpenGL、OpenGL ES、Direct3D、Metal 和Vulkan)的抽象层。
作为直接使用 OpenGL 或 Vulkan 渲染到QWindow 的替代方案,QRhi 及其相关类提供了一个可移植的、跨平台的 3D 图形和计算 API,并辅以着色器条件处理和转译管道。这样,应用程序就可以避免直接依赖于单一的、在某些情况下属于特定供应商或平台的 3D API。
以下是与 RHI 相关的主要类列表。此外还有许多其他类和结构体作为补充。
- QRhi
- QShader
- QShaderDescription
- QRhiCommandBuffer
- QRhiResourceUpdateBatch
- QRhiBuffer
- QRhiRenderBuffer
- QRhiTexture
- QRhiSampler
- QRhiShadingRateMap
- QRhiTextureRenderTarget
- QRhiShaderResourceBindings
- QRhiGraphicsPipeline
- QRhiComputePipeline
- QRhiSwapChain
请参阅RHI 窗口示例,了解如何使用QRhi 在QWindow 上进行加速 3D 渲染,从而创建可移植、跨平台应用程序的入门示例。
直接操作QWindow 是使用QRhi API进行渲染的最先进且通常最具灵活性的方式。然而,这是一种最低级的方法,其局限性在于完全无法利用Qt的用户界面技术、控件以及Qt Quick 。 在许多情况下,应用程序更倾向于将基于QRhi 的渲染集成到基于小部件或Qt Quick 的用户界面中。QWidget 基于 的应用程序可选择通过QWidget::createWindowContainer() 将窗口作为原生子节点嵌入小部件层次结构中,但在许多情况下,QRhiWidget 提供了一种更便捷的方式,用于将基于QRhi 的渲染集成到小部件用户界面中。Qt Quick 提供了自己的启用器集合,用于通过基于QRhi 的自定义渲染来扩展 2D/3D 场景。
注意: 与常规的 Qt 公共 API 不同,RHI 系列API 目前仅提供有限的兼容性保证。详情请参阅QRhi 。
3D 矩阵与向量运算
Qt GUI 模块还包含一些数学类,用于辅助与3D图形相关的最常见数学运算。这些类包括QMatrix4x4 、QVector2D 、QVector3D 、QVector4D 和QQuaternion 。
OpenGL 和 OpenGL ES 集成
QWindow 根据平台支持情况,支持使用 OpenGL 和 OpenGL ES 进行渲染。要启用 OpenGL 渲染,需将QWindow 的表面类型设置为QSurface::OpenGLSurface ,使用QSurfaceFormat 选择格式属性,然后创建一个QOpenGLContext 来管理原生 OpenGL 上下文。 此外,Qt 还提供了 `QOpenGLPaintDevice`,该功能支持使用 OpenGL 加速的 `QPainter ` 渲染,并提供了便利类,这些类简化了 OpenGL 代码的编写,同时隐藏了扩展处理的复杂性以及 OpenGL ES 2 与桌面版 OpenGL 之间的差异。 这些便利类包括QOpenGLFunctions ,它允许应用程序在桌面版OpenGL上使用所有OpenGL ES 2函数,而无需手动解析OpenGL函数指针。这使得针对移动或嵌入式设备的应用程序能够进行跨平台开发,并提供了将原生OpenGL功能封装在更简单的Qt API中的类:
- QOpenGLBuffer
- QOpenGLFramebufferObject
- QOpenGLShaderProgram
- QOpenGLTexture
- QOpenGLDebugLogger
- QOpenGLTimerQuery
- QOpenGLVertexArrayObject
最后,为了更好地支持 OpenGL 的新版本(3.0 及更高版本),还提供了一种带版本号的函数封装机制: QOpenGLFunction_N_N 类族公开了特定 OpenGL 版本和配置文件中的所有函数,从而便于开发依赖于现代、仅限桌面环境的 OpenGL 功能的桌面应用程序。
有关更多信息,请参阅OpenGL 窗口示例。
使用QSurface::OpenGLSurface 创建的QWindow 可与QPainter 和QOpenGLPaintDevice 结合使用,通过牺牲部分视觉质量来实现OpenGL硬件加速的2D图形渲染。
Vulkan 集成
Qt GUI 支持VulkanAPI。Qt 应用程序需要安装LunarG Vulkan SDK。
在 Windows 系统上,该 SDK 会设置环境变量VULKAN_SDK ,configure 脚本将检测到该变量。
在 Android 平台上,Vulkan 头文件已添加到 NDK 的 API 级别 24 中。
与低级 Vulkan 支持相关的主要类包括:
此外,QVulkanWindow 提供了一个QWindow 的便捷子类,可帮助开发者更轻松地开始基于 Vulkan 的渲染实现,目标为QWindow 。使用此辅助类完全是可选的;对于采用更高级 Vulkan 渲染器的应用程序,可能更希望直接使用类型为QSurface::VulkanSurface 的QWindow 。
有关更多信息,请参阅“Hello Vulkan 控件示例”和“Hello Vulkan 三角形示例”。
拖放
Qt GUI 支持拖放功能。有关详细信息,请参阅“拖放概述”。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.