Graphics

Qt 5 中的图像生成方式主要有 QPainter API, 或 Qt的声明式 UI 语言, Qt Quick, 及 Qt Quick的场景图后端. Qt 5的图像功能还包括对打印的支持, 及各种图像格式的加载和保存.

2D Graphics with QPainter

QPainter 提供的 API, 用于绘制不同的表面, 包括矢量图形, 文本和图像, 或 QPaintDevice 实例, 如 QImage, QOpenGLPaintDevice, QWidget, QPrinter. 实际绘制发生在 QPaintDeviceQPaintEngine 中. 软件光栅化和 OpenGL (ES) 2.0 后端是两个最重要的 QPaintEngine 实现. 光栅绘制引擎是 Qt 的软件光栅器, 在 QImageQWidget 上绘制时使用. 与 OpenGL 绘制引擎相比, 它的优势在于启用抗锯齿功能时的高质量与完整的功能集.

QPainter 最重要的渲染目标是:

QPainter 及相关类是 Qt GUI 模块的一部分.

OpenGL and 3D

OpenGL 是最广泛采用的硬件加速和 3D 图形图形 API, 在所有桌面平台以及几乎所有移动和嵌入式平台上实现. Qt 库包含许多类, 可帮助用户将 OpenGL 驱动的图形或其他图形 API 调用集成到其应用程序中, 以及用于显示 3D 内容的附加模块.

  • OpenGL in Qt GUI - 概述 OpenGL 如何与 Qt GUI 模块集成.
  • QOpenGLWidget 是一个 widget, 允许将 OpenGL 场景添加到基于 QWidget 的用户界面中.
  • OpenGL and Qt Quick 2.0 - 如何将应用程序提供的图形命令 (OpenGL, Vulkan, Direct3D等) 集成到 Qt Quick 场景中.
  • www.khronos.org/opengl - 官方的 OpenGL 页面.
  • Qt Quick 3D - 一个附加模块, 提供用于创建基于 Qt Quick 的 3D 内容或 UI 的高级 API.
  • Qt 3D - 一个附加模块, 在 Qt C++ 和 Qt Quick 应用程序中为近实时模拟系统提供功能, 支持 2D 和 3D 渲染.

在 Qt 5.0 之前, Qt 中的 OpenGL 支持由 Qt OpenGL 模块处理. 该模块仍然存在, 但新代码应该旨在使用 Qt GUI 模块中的新类. 这些类根据其名称很容易区分: 不应使用带有 QGL 前缀的类. 相反, 提倡使用 QOpenGL 前缀的类.

Qt Quick Scene Graph

Qt Quick 2 引入用于渲染的 OpenGL (ES) 2.0 场景图. 与早期版本中使用的基于 QGraphicsView/QPainter 的方法相比, 它显著提供了 Qt Quick 2 的性能.

场景图是场景 item 的图形表示. 它可以被认为是一个图形深层副本, 一个独立的结构, 包含足够的信息来呈现所有item. 一旦设置完毕, 就可以独立于 item 的状态对其操作和渲染. 在许多平台上, 当 GUI 线程准备下一帧的状态时, 场景图甚至会在专用渲染线程上渲染.

当你在 QML 文件中导入 QtQuick 2.x, 并使用 QQuickView 运行时, 将使用场景图.

通过连接到 QQuickWindow::beforeRendering() 或 QQuickWindow::afterRendering() 信号, Qt Quick 可以与原始 OpenGL 渲染混合, 这些信号分别在 Qt Quick 场景图渲染之前和之后发出. 信号从渲染线程发出(如果适用), 并且连接需要直接连接.

Qt Quick 也可以使用 Qt Quick 2D Renderer 渲染. 这个光栅渲染引擎可以在没有 OpenGL 的平台上渲染 Qt Quick 应用程序.

Printing

Qt 支持直接打印到本地或网络上的实际打印机, 以及生成 PDF 输出. 详见 Qt Print Support.

Images

Qt 提供 QImage 类支持便捷读写和操作图像. 此外, 使用 QImageReaderQImageWriter 可以更细粒度地控制图像的加载或保存方式. 要添加对 Qt 提供的图像格式之外的其他图像格式的支持, 你可以使用 QImageIOHandlerQImageIOPlugin 创建图像格式.

详见 Reading and Writing Image Files.

另见 Paint System.