Qt 的绘图系统允许使用相同的 API 在屏幕和其它打印设备上进行绘制。整个绘图系统基于QPainter, QPainterDevice 和 QPaintEngine 三个类。
QPainter 用来执行绘制的操作; QPaintDevice 是一个二维空间的抽象,这个二维空间允许QPainter 在其上面进行绘制,也就是 QPainter 工作的空间; QPaintEngine 提供了画笔( QPainter)在不同的设备上进行绘制的统一的接口。 QPaintEngine 类应用于 QPainter 和
QPaintDevice 之间,通常对开发人员是透明的。除非你需要自定义一个设备,否则你是不需要关心 QPaintEngine 这个类的。我们可以把 QPainter 理解成画笔;把 QPaintDevice 理解成使用画笔的地方,比如纸张、屏幕等;而对于纸张、屏幕而言,肯定要使用不同的画笔绘制,为了统一使用一种画笔,我们设计了 QPaintEngine 类,这个类让不同的纸张、屏幕都能使用一种画笔。
下图给出了这三个类之间的层次结构(出自 Qt API 文档):
上面的示意图告诉我们, Qt 的绘图系统实际上是,使用 QPainter 在QPainterDevice 上进行绘制,它们之间使用 QPaintEngine 进行通讯(也就是翻译 QPainter 的指令)。
class PaintedWidget : public QWidget
{
Q_OBJECT
public