Qt GUI 概述

Qt GUI 模块提供了用于窗口系统集成、事件处理、OpenGL 和 OpenGL ES 集成、2D 图形、基本图像、字体和文本的类。这些类在 Qt 用户界面技术内部使用,但也可直接使用,例如使用低级 OpenGL ES 图形 API 编写应用程序。

对于编写用户界面的应用程序开发人员来说,Qt 提供了更高级别的 API,如Qt Quick ,这些 API 比Qt GUI 模块中的启用程序更适用。

应用程序窗口

Qt GUI 模块中最重要的类是QGuiApplicationQWindow 。想要在屏幕上显示内容的 Qt 应用程序必须使用这些类。QGuiApplication 包含主事件循环,所有来自窗口系统和其他来源的事件都在这里进行处理和分派。它还处理应用程序的初始化和最终确定。

QWindow 类代表底层窗口系统中的一个窗口。它提供了大量虚拟函数来处理来自窗口系统的事件 (QEvent),如触摸输入、曝光、聚焦、击键和几何变化。

二维图形

Qt GUI 模块包含用于 2D 图形、图像、字体和高级排版的类。

使用表面类型QSurface::RasterSurface 创建的QWindow 可与QBackingStoreQPainter 结合使用,后者是 Qt 高度优化的 2D 矢量图形 API。QPainter 支持绘制线条、多边形、矢量路径、图像和文本。更多信息,请参阅 "绘制系统光栅窗口示例"。

Qt XML 可使用QImageQPixmap 类加载和保存图像。默认情况下,Qt 支持最常见的图像格式,包括 JPEG 和 PNG 等。用户可通过QImageIOPlugin 类添加对其他格式的支持。更多信息,请参阅读取和写入图像文件

Qt 中的排版是通过QTextDocument 完成的,它使用QPainter API 与 Qt 的字体类(主要是QFont )相结合。喜欢使用更底层 API 来处理文本和字体的应用程序可以使用QRawFontQGlyphRun 等类。

RHI 图形

Qt 渲染硬件接口(Qt Rendering Hardware Interface)是硬件加速图形 API(如OpenGLOpenGL ESDirect3DMetalVulkan)的抽象。

作为直接使用 OpenGL 或 Vulkan 渲染QWindow 的替代方案,QRhi 和相关类提供了可移植、跨平台的 3D 图形和计算 API,并辅以着色器调节和转译管道。这样,应用程序就可以避免直接依赖于单一的 3D API,在某些情况下,还可以避免依赖于特定的供应商或平台。

下面列出了与 RHI 相关的主要类。此外还有一些附加类和结构体。

请参阅 "RHI 窗口示例"(RHI Window Example),了解如何创建一个可移植的跨平台应用程序,使用QRhiQWindow 上执行加速 3D 渲染。

直接使用QWindow 是使用QRhi API 进行渲染的最先进、通常也是最灵活的方法。不过,这也是最低级的方法,而且受到 Qt Widgets 和Qt Quick 等 UI 技术的限制,根本无法使用。在许多情况下,应用程序更希望将基于QRhi 的渲染集成到基于 widget 或Qt Quick 的用户界面中。QWidget基于 RHI 的应用程序可以选择通过QWidget::createWindowContainer() 将窗口作为本地子窗口嵌入到 widget 层次结构中,但在许多情况下,QRhiWidget 将提供更方便的启用程序,将基于QRhi 的渲染集成到 widget UI 中。Qt Quick 提供了自己的启用程序集,用于通过基于QRhi 的自定义渲染扩展 2D/3D 场景。

注: 与常规 Qt 公共 API 不同,RHI 系列 API 目前提供有限的兼容性保证。详情请查看QRhi

三维矩阵和矢量数学

Qt GUI 模块还包含一些数学类,可帮助进行与 3D 图形相关的最常见数学运算。这些类包括QMatrix4x4,QVector2D,QVector3D,QVector4DQQuaternion

OpenGL 和 OpenGL ES 集成

QWindow 根据平台的支持情况,.NET Framework 支持使用 OpenGL 和 OpenGL ES 进行渲染。启用 OpenGL 渲染的方法是:将 的表面类型设置为 ,使用 选择格式属性,然后创建一个 来管理本地 OpenGL 上下文。此外,Qt 还拥有 ,可使用 OpenGL 加速的 渲染,以及简化 OpenGL 代码编写、隐藏扩展处理复杂性和 OpenGL ES 2 与桌面 OpenGL 之间差异的便利类。便利类包括 ,可让应用程序使用桌面 OpenGL 上的所有 OpenGL ES 2 功能,而无需手动解析 OpenGL 功能指针。这使得针对移动或嵌入式设备的应用程序的跨平台开发成为可能,并提供了将本地 OpenGL 功能封装在更简单的 Qt API 中的类:QWindow QSurface::OpenGLSurface QSurfaceFormat QOpenGLContext QOpenGLPaintDevice QPainter QOpenGLFunctions

最后,为了更好地支持较新版本(3.0 及更高版本)的 OpenGL,还提供了一个版本控制的函数封装机制:QOpenGLFunction_N_N 系列类公开了给定 OpenGL 版本和配置文件中的所有函数,从而可以轻松开发依赖于现代桌面专用 OpenGL 功能的桌面应用程序。

更多信息,请参阅OpenGL 窗口示例

使用QSurface::OpenGLSurface 创建的QWindow 可与QPainterQOpenGLPaintDevice 结合使用,通过牺牲部分视觉质量来获得 OpenGL 硬件加速的 2D 图形。

Vulkan 集成

Qt GUI 支持VulkanAPI。Qt 应用程序需要使用LunarG Vulkan SDK

在 Windows 上,SDK 会设置环境变量VULKAN_SDKconfigure 脚本会检测到该环境变量。

在 Android 上,Vulkan 头文件被添加到 NDK 的第 24 级 API 中。

底层 Vulkan 支持的主要相关类有

此外,QVulkanWindow 还提供了一个QWindow 的便利子类,让用户更容易开始使用QWindow 实现基于 Vulkan 的渲染。使用该辅助类完全是可选的;使用更高级的基于 Vulkan 的渲染器的应用程序可能希望直接使用QSurface::VulkanSurface 类型的QWindow

更多信息,请参阅Hello Vulkan Widget 示例Hello Vulkan 三角形 示例

拖放

Qt GUI 包括对拖放的支持。拖放概述中有更多信息。

© 2025 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.