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