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 包含 main 事件循环,将处理和分派窗口系统和其它来源的所有事件。它还处理应用程序的初始化及定稿。

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.1.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.1 版

FreeType 工程许可或仅 GNU GPL (一般公共许可) 第 2.0 版

HarfBuzz-NG,第 2.8.0 版

MIT 许可

IAccessible2 IDL 规范,第 1.3.0 版

BSD 3 条款新 (或修订) 许可

LibJPEG-turbo,第 2.1.0 版

独立 JPEG 组许可

LibPNG,第 1.6.37 版

libpng 许可和 PNG 参考库,第 2 版

MD4C,第 0.4.7 版

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 文件

国际色彩联盟许可

参考