Qt GUI

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

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

快速入门

要包括模块类定义,使用以下指令:

#include <QtGui>
					

若使用 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 图形。

Qt GUI Prior to Qt 5.0

Prior to Qt 5.0, the Qt GUI module was the monolithic container for all things relating to graphical user interfaces in Qt, and included the Qt widget set, the item views, the graphics view framework and also printing. Starting Qt 5, these classes have been moved to the Qt Widgets module. Printing has been moved to the Qt Print Support module. Please note that these modules can be excluded from a Qt installation.

Qt GUI now contains only a small set of enablers, which are generally useful for all graphical applications.

拖放

更多信息在 拖放

许可和归属

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

Furthermore, Qt GUI in Qt 5.9.9 may contain third-party modules under following permissive licenses:

ANGLE Library

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

ANGLE: Array Bounds Clamper for WebKit

BSD 2 条款简化许可

ANGLE: Murmurhash

公共领域

ANGLE: Systeminfo

BSD 2 条款简化许可

ANGLE: trace_event

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

来自 FreeType 2 的抗锯齿光栅化器

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

Cocoa 平台插件

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

Freetype 2

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

Freetype 2 - BDF (位图分发格式) 支持

MIT 许可

Freetype 2 - PCF (便携式编译格式) 支持

MIT 许可

Freetype 2 - zlib

zlib 许可

HarfBuzz

MIT 许可

HarfBuzz-NG

MIT 许可

IAccessible2 IDL Specification

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

LibJPEG

独立 JPEG 组许可

LibPNG

libpng 许可和 libpng 许可 2

Android 本机风格

Apache 许可 2.0

OpenGL ES 2 Headers

MIT 许可

OpenGL Headers

MIT 许可

Pixman

MIT 许可

平滑比例缩放算法

BSD 2 条款简化许可和 Imlib2 许可

Wintab API

公共领域

XCB

MIT 许可

xkbcommon

MIT Licenses (with no-advertisement clause)

参考