绘图设备和服务端#

创建绘图设备#

QPaintDevice 类是可绘制对象的基类,即 QPainter 可以在任何 QPaintDevice 子类上绘制。 QPaintDevice 的绘图功能中实现的部分由 QWidget、QImageQPixmapQPicture、QPrinter 和 QOpenGLPaintDevice 实现。

控件

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

图像

QImage 类提供了一个硬件无关的图像表示,该表示针对 I/O 进行设计和优化,以及直接进行像素访问和处理。 QImage 支持多种图像格式,包括单色、8 位、32 位和带alpha通道混合图像。

使用 QImage 作为绘图设备的一个优点是可以通过平台无关的方式确保任何绘图操作的像素精确度。另一个好处是可以在除了当前 GUI 线程之外的其他线程中执行绘图。

位图

《QPixmap》类是一个离屏图像表示,专为在屏幕上显示图像而设计和优化。与《QImage》不同,图标的像素数据是内部的,由底层窗口系统管理,即像素只能通过《QPainter》函数或通过将《QPixmap》转换为《QImage》来访问。

为了优化《QPixmap》的绘制,Qt提供了《QPixmapCache》类,该类可以用来存储暂时昂贵的图标,而不会使用比缓存限制更多的存储空间。

Qt还提供了一个方便的《QBitmap》类,继承自《QPixmap》。《QBitmap》保证单色(1位深度)图标,主要用于创建自定义《QCursor》和《QBrush》对象,构建《QRegion》对象。

OpenGL绘图设备

如前所述,Qt提供了一些类,使在Qt应用程序中使用OpenGL变得容易。例如,QOpenGLPaintDevice允许使用《QPainter》渲染OpenGL API。

图片

《QPicture》类是一个记录和回放《QPainter》命令的绘图设备。图片以平台无关的格式将绘图命令序列化到IO设备。《QPicture》也是分辨率无关的,即一个图片可以在不同的设备上(例如svg、pdf、ps、打印机屏幕)以相同的方式显示。

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

自定义后端

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