Qt GUI

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

对于编写用户界面的应用程序开发者而言,Qt 提供更高级别 API (像 Qt Quick,它比在 Qt GUI 模块中找到的使能器更适合)。

使用模块

使用 Qt 模块要求直接或透过其它依赖链接到模块库。一些构建工具为此有贡献支持,包括 CMake and qmake .

构建采用 CMake

使用 find_package() 命令去定位所需模块组件,在 Qt6 包:

find_package(Qt6 COMPONENTS Gui REQUIRED)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
					

另请参阅 构建采用 CMake 概述。

采用 qmake 构建

若使用 qmake 去构建工程,默认包括 Qt GUI。要禁用 Qt GUI,添加以下行到 .pro 文件:

QT -= gui
					

应用程序窗口

Qt GUI 模块最重要的类是 QGuiApplication and QWindow 。想要在屏幕上展示内容的 Qt 应用程序,将需要用到这些。 QGuiApplication 包含主事件循环,来自窗口系统和其它源的所有事件都会被处理和分派。它还处理应用程序的初始化及定稿。

QWindow 类表示在底层窗口系统中的窗口。它提供许多虚函数以处理事件 ( QEvent ) 从窗口系统,譬如:触摸输入、曝光、聚焦、击键及几何图形变化。

2D 图形

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

QWindow 的创建采用表面类型 QSurface::RasterSurface 可以用于组合 QBackingStore and QPainter ,Qt 高度优化的 2D 向量图形 API。 QPainter 支持绘制线条、多边形、向量路径、图像及文本。更多信息,见 描绘系统 and 光栅窗口范例 .

Qt 可以加载和保存图像,使用 QImage and QPixmap 类。默认情况下,Qt 支持最常见的图像格式,包括 JPEG 和 PNG 等。用户可以添加支持其它格式凭借 QImageIOPlugin 类。更多信息,见 读写图像文件

Qt 中的排印是采用 QTextDocument 使用 QPainter API 组合 Qt 的字体类,首要是 QFont 。应用程序首选更低级的 API 来处理文本和字体,像类 QRawFont and QGlyphRun 可以使用。

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 函数指针,因此,允许跨平台开发针对移动或嵌入式设备的应用程序,及一些在更简单 Qt API 中包裹本机 OpenGL 功能的类:

最后,为提供对 OpenGL 较新版本 (3.0 及更高版本) 的更好支持,版本化的函数包裹器机制也是可用的:QOpenGLFunction_N_N 系列类暴露给定 OpenGL 版本和 profile 的所有函数,允许依赖现代,仅桌面的 OpenGL 特征,轻松开发桌面应用程序。

更多信息,见 OpenGL 窗口范例 .

Qt GUI 模块还包含一些数学类,以辅助 3D 图形相关的最常见数学运算。这些类包括 QMatrix4x4 , QVector4D and QQuaternion

QWindow 的创建采用 QSurface::OpenGLSurface 可以用于组合 QPainter and QOpenGLPaintDevice 通过牺牲一些视觉品质让 OpenGL 硬件加速 2D 图形。

Vulkan 集成

Qt GUI 支持 Vulkan API。Qt 应用程序要求存在 LunarG Vulkan SDK .

在 Windows,SDK 设置环境变量 VULKAN_SDK ,会被检测到通过 configure 脚本。

在 Android,NDK 的 API Level 24 添加了 Vulkan 头。

相关类:

更多信息,见 Hello Vulkan 小部件范例 Hello Vulkan 窗口范例 .

拖放

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

模块演变

Qt GUI 的变化 列出了 Qt 的 Qt 6 系列在模块 API 和功能上所做出的重要改变。

许可和归属

Qt GUI 在商业许可下是可用的来自 Qt 公司 。此外,它在自由软件许可下也是可用的: GNU LGPL (次一般公共许可) 第 3 版 ,或 GNU GPL (一般公共许可) 第 2 版 。见 Qt 许可 进一步了解细节。

此外,Qt 6.2.1 的 Qt GUI 可能包含的第 3 方模块遵循下列准许许可:

用于新字体的 Adobe Glyph 列表,第 1.7 版 BSD 3 条款新 (或修订) 许可
来自 FreeType 2 的抗锯齿光栅化器 FreeType 工程许可或仅 GNU GPL (一般公共许可) 第 2.0 版
Bitstream Vera字体,第 1.10 版 Bitstream Vera 字体许可
Cocoa 平台插件 BSD 3 条款新 (或修订) 许可
DejaVu 字体,第 2.37 版 Bitstream Vera 字体许可
Freetype 2 - BDF (位图分发格式) 支持 MIT 许可
Freetype 2 - PCF (便携式编译格式) 支持 MIT 许可
Freetype 2 - zlib zlib 许可
Freetype 2,第 2.10.4 版 FreeType 工程许可或仅 GNU GPL (一般公共许可) 第 2.0 版
HarfBuzz-NG,第 2.9.0 版 MIT 许可
IAccessible2 IDL 规范,第 1.3.0 版 BSD 3 条款新 (或修订) 许可
LibJPEG-turbo,第 2.1.1 版 独立 JPEG 组许可和 BSD 3 条款新 (或修订) 许可及 zlib 许可
LibPNG,第 1.6.37 版 libpng 许可和 PNG 参考库,第 2 版
MD4C,第 0.4.8 版 MIT 许可
Android 本机风格 Apache 许可 2.0
OpenGL ES 2 头,修订版 27673 MIT 许可
OpenGL 头,修订版 27684 MIT 许可
Pixman,第 0.17.12 版 MIT 许可
平滑比例缩放算法 BSD 2 条款简化许可和 Imlib2 许可
Vulkan API 注册表,第 1.2.166 版 MIT 许可
Vulkan 内存分配程序,第 2.3.0 版 MIT 许可
WebGradients MIT 许可
Wintab API LCS 电报许可
X 服务器帮手 X11 许可和历史权限通知及免责声明
XCB-XInput MIT 许可
sRGB 颜色 profile icc 文件 国际色彩联盟许可

参考