一、绘图基础
2D 绘图系统如下:
2D 绘图主要是 QPainter、QPaintDevice、QPaintEngine 三个类,主要类的作用(其关系见图示)
- QPainter(绘制器)是用来执行绘图的操作,用于描述需要绘制的图形,比如需要绘制线、矩形、圆形等。
- QPaintDevice(绘图设备)是抽象出来的需要绘制的绘图设备,即可以在什么上面绘制图形,比如可在 QWidget、QImage、QPrinter 等上面绘图。
- QPaintEngine(绘图引擎)提供 QPainter 绘制在不同类型设备上的接口,比如光栅绘图引擎,OPenGL 绘图引擎等。该类通常由 QPainter 和 QPaintDevice 内部使用,除非创建自定义的设备类型,否则通常不需要使用该类。
二、QPainter类
QPainter类介绍
此处的QPainter类只做一个简单的解释,后面会单独写一篇文档介绍该类
使用 QPainter 绘制图形的步骤:
- 创建一个 QPainter 对象;
- 调用QPainter::begin(QPaintDevice)指定绘图设备并开始绘制,此步骤也可在 QPainter的构造函数中完成。注意:每次调用begin()函数都会把QPainter 的设置重置为默认值。
- 调用 QPainter 的成员函数绘制图形,调用 QPainter::end()结束绘制。
- 注意:若绘制设备是一个 QWidget 部件,则 QPainter 只能在 paintEvent()处理函数中使用(即,需要子类化 QWidget 部件,并重新实现该函数)。
示例:
void paintEvent(QPaintEvent *e)
{
QPainter pr(this); //创建 pr 对象,并立即开始在部件 this 上绘制图形。
pr.drawLine(QPoint(11,11), QPoint(111,111)); //绘制一条从点(11,11)到点(111,111)的直线
} //函数结束时,在 QPainter 的析构函数中调用 end()函数结束绘制。
以上代码与以下代码等效。