Qt GUI 模块提供用于窗口系统集成、事件处理、OpenGL 和 OpenGL ES 集成、2D 图形、基本图像、字体及文本的类。这些类用于 Qt 用户界面技术内部,也可以直接使用,例如:使用低级 OpenGL ES 图形 API 编写应用程序。
对于编写用户界面的应用程序开发者而言,Qt 提供更高级别 API (像 Qt Quick,它比在 Qt GUI 模块中找到的使能器更适合)。
使用 Qt 模块要求直接或透过其它依赖链接到模块库。一些构建工具为此有贡献支持,包括 CMake and qmake .
使用
find_package()
命令去定位所需模块组件,在
Qt6
包:
find_package(Qt6 COMPONENTS Gui REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Gui)
另请参阅 构建采用 CMake 概述。
若使用
qmake
去构建工程,默认包括 Qt GUI。要禁用 Qt GUI,添加以下行到
.pro
文件:
QT -= gui
Qt GUI 模块最重要的类是 QGuiApplication and QWindow 。想要在屏幕上展示内容的 Qt 应用程序,将需要用到这些。 QGuiApplication 包含主事件循环,来自窗口系统和其它源的所有事件都会被处理和分派。它还处理应用程序的初始化及定稿。
QWindow 类表示在底层窗口系统中的窗口。它提供许多虚函数以处理事件 ( QEvent ) 从窗口系统,譬如:触摸输入、曝光、聚焦、击键及几何图形变化。
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 可以使用。
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 图形。
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 文件 | 国际色彩联盟许可 |