Qt学习之十六:Qt绘制系统简介
2016-09-15 20:58
162 查看
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 的指令)。
QPainter 接收一个 QPaintDevice 指针作为参数。 QPaintDevice 有很多子类,比如 QImage,以及 QWidget。注意回忆一下, QPaintDevice 可以理解成要在哪里去绘制,而现在我们希望画在这个组件,因此传入的是 this 指针。
请注意我们的绘制顺序,首先是直线,然后是矩形,最后是椭圆。按照这样的绘制顺序,可以看到直线是第一个绘制,位于最下一层;矩形是第二个绘制,在中间一层;椭圆是最后绘制,在最上层。
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: PaintedWidget(QWidget* parent=0); protected: void PaintEvent(QPaintEvent* ); }; PaintedWidget::PaintedWidget(QWidget *parent) :QWidget(parent) { resize(800,600); setWindowTitle(tr("Painte Demo")); } void PaintedWidget::PaintEvent(QPaintEvent *) { QPainter painter(this); painter.drawLine(70,100,650,500); painter.setPen(Qt::red); painter.drawRect(10,10,100,400); painter.setPen(QPen(Qt::green,5)); painter.setBrush(Qt::blue); painter.drawEllipse(50,150,400,200); }
QPainter 接收一个 QPaintDevice 指针作为参数。 QPaintDevice 有很多子类,比如 QImage,以及 QWidget。注意回忆一下, QPaintDevice 可以理解成要在哪里去绘制,而现在我们希望画在这个组件,因此传入的是 this 指针。
请注意我们的绘制顺序,首先是直线,然后是矩形,最后是椭圆。按照这样的绘制顺序,可以看到直线是第一个绘制,位于最下一层;矩形是第二个绘制,在中间一层;椭圆是最后绘制,在最上层。
相关文章推荐
- Qt 绘制系统简介
- 【Qt笔记】Qt 绘制系统简介
- QT5 学习之路24---Qt 绘制系统简介
- Qt 学习之路 2(24):Qt 绘制系统简介
- Qt 学习之路 :Qt 绘制系统简介
- Qt的元对象(Meta-Object)系统简介
- Qt的元对象(Meta-Object)系统简介(转)
- QT 绘制系统
- Qt坐标系统与图形绘制
- 绘制系统(绘制系统简介,画笔和画刷,渐变系统,坐标系统,绘制文字和图片,图形视图框架)
- Qt的元对象(Meta-Object)系统简介
- Qt的元对象(Meta-Object)系统简介
- Qt图形视图框架三--坐标系统简介
- Qt的元对象(Meta-Object)系统简介
- Qt的元对象(Meta-Object)系统简介
- Qt绘制系统(Paint System)
- QT 绘制系统学习
- Qt paintEvent绘制窗体 注意Qt::WA_PaintOutsidePaintEvent 只是适用于X11,其他系统均无效
- Qt的元对象(Meta-Object)系统简介
- Qt的元对象(Meta-Object)系统简介