绘图设备和支持后端

创建绘图设备

QPaintDevice 类是可绘制对象的基类,即 QPainter 可在任意 QPaintDevice 子类上绘制。 QPaintDevice 的绘制功能通过 QWidgetQImageQPixmapQPictureQPrinterQOpenGLPaintDevice 等来实现。

小部件

QWidget 类是 Qt Widgets 模块中用户界面元素的基类。它从窗口系统接收鼠标、键盘和其他事件,并在屏幕上绘制其本身的表现。

图像

QImage 类提供了一个硬件独立的图像表示,它经过设计和优化,用于输入输出操作,以及直接访问和操作像素。 QImage 支持多种图像格式,包括单色、8 位、32 位和透明混合图像。

使用 QImage 作为绘图设备的一个优点是,可以以平台无关的方式保证任何绘图操作的像素精确度。另一个好处是,可以在其他线程上执行绘图操作,而不是当前的用户界面线程。

像素映射

QPixmap 类是一种脱屏图像表示,它设计和优化了在屏幕上显示图像。与 QImage 不同,像素映射中的像素数据是内部的,由底层窗口系统管理,即像素只能通过 QPainter 函数或转换为 QImage 来访问。

为优化 使用 QPixmap 的绘图,Qt 提供了 QPixmapCache 类,它可以用来存储重复利用的临时像素映射,而不必超出缓存限制而产生额外的存储空间。

Qt 还提供了继承自 QPixmap 的 convenience 类 QBitmapQBitmap 保证单色(1 位深度)像素映射,主要用于创建定制的 QCursorQBrush 对象,构建 QRegion 对象。

OpenGL 绘图设备

如前所述,Qt 提供了易于在 Qt 应用程序中使用 OpenGL 的类。例如,QOpenGLPaintDevice 允许通过 QPainter 使用 OpenGL API 进行渲染。

图片

QPicture 类是一个绘图设备,记录和重放 QPainter 命令。图像将绘图命令序列化为一个平台无关的格式,并写入 IO 设备。QPicture 也具有分辨率无关性,即一个 QPicture 可以在不同的设备上(例如 svg、pdf、ps、打印机、屏幕)上显示相同。

Qt 提供了 QPicture::load() 和 QPicture::save() 函数,以及用于加载和保存图片的字节流操作符。

自定义后端

可以通过从 QPaintDevice 类派生并重新实现虚拟函数 QPaintDevice::paintEngine() 来实现对新后端的支持,以告诉 QPainter 应该使用哪个绘图引擎来绘制这个特定的设备。要实际在设备上绘制,这个绘图引擎必须是从 QPaintEngine 类派生出的自定义绘图引擎。

© 2024Qt公司有限公司。其中包括的文档贡献的版权属于相应的所有者。本处的文档是根据自由软件基金会发布的 GNU自由文档许可协议版本1.3 的条款进行许可。Qt和相应的标志是Qt公司在芬兰及其它全球国家的商标。所有其他商标属于其相应的所有者。