绘图设备和后端¶
创建绘图设备¶
QPaintDevice 类是能够被绘制的对象的基类,也就是说,QPainter 可以在任何 QPaintDevice 子类上进行绘制。QPaintDevice 的绘图功能由 QWidget、QImage、QPixmap、QPicture、QPrinter 和 QOpenGLPaintDevice 等实现。
Widget
QWidget 类是 Qt Widgets 模块中用户界面元素的基类。它从窗口系统接收鼠标、键盘和其他事件,并在屏幕上绘制自身的表示。
图像
QImage类提供了一个硬件无关的图像表示,它被设计和优化用于I/O操作,以及直接的像素访问和操作。QImage支持多种图像格式,包括单色、8位、32位和带有alpha混合的图像。使用
QImage作为绘图设备的一个优势是,可以保证在任何绘图操作中的像素精确性,这种方式是平台无关的。另一个好处是,绘图可以在与当前GUI线程不同的另一个线程中执行。Pixmap
QPixmap类是一个离屏图像表示,它被设计和优化用于在屏幕上显示图像。与QImage不同,pixmap 中的像素数据是内部的,并由底层窗口系统管理,即像素只能通过QPainter函数或通过将QPixmap转换为QImage来访问。为了优化使用
QPixmap的绘图,Qt 提供了QPixmapCache类,该类可用于存储生成成本高且不超过缓存限制的临时 pixmap。Qt 还提供了继承自
QPixmap的便捷类QBitmap。QBitmap保证单色(1位深度)pixmap,主要用于创建自定义的QCursor和QBrush对象,构建QRegion对象。OpenGL 绘图设备
如前所述,Qt 提供了使在 Qt 应用程序中使用 OpenGL 变得容易的类。例如,QOpenGLPaintDevice 启用了 OpenGL API,以便与
QPainter一起进行渲染。图片
QPicture类是一个绘制设备,用于记录和回放QPainter命令。图片以平台无关的格式将绘制命令序列化到IO设备。QPicture也是分辨率无关的,即QPicture可以在不同的设备上显示(例如 svg、pdf、ps、打印机和屏幕),看起来相同。自定义后端
可以通过从
QPaintDevice类派生并重新实现虚拟paintEngine()函数来支持新的后端,以告诉QPainter应该使用哪种绘图引擎在此特定设备上绘制。为了能够在此设备上实际绘制,此绘图引擎必须是通过从QPaintEngine类派生创建的自定义绘图引擎。