绘制系统组件
QT中的绘画系统依赖于三个类:画家QPainter、画布QPainterDevice和绘画引擎QPaintEngine。
QPainter是绘画指令的操作者,一切绘画操作由QPainter完成。
QPaintDevice是一个二维空间的抽象,代表了屏幕上的一个可绘制区域。由于QPaintDevice类型繁多(如QImage、QWidget、QPdf等),因此使用QPaintEngine翻译来自QPainter的指令,以便为所有设备提供相同的绘制操作。
QT中绘画流程:

绘图事件与其发生时机
QT中的绘制系统能且只能运行在绘图事件中,若绘图操作运行在非绘图事件中,则代码无效。
每当程序最大化、最小化或由阻挡变为完全时也会进行绘制。手动调用绘图事件的方法为调用update()函数。
例:
#include <QWidget>
#include <QPaintEvent>
#include <QPainter>
class PaintEv : public QWidget
{
Q_OBJECT
public:
PaintEv(QWidget *parent = nullptr);
~PaintEv();
protected:
void paintEvent(QPaintEvent*e)override;
};
//
PaintEv::PaintEv(QWidget *parent)
: QWidget(parent)
{
this->resize(600,200);
}
void PaintEv::paintEvent(QPaintEvent *e)
{
QPainter painter(this);
painter.setPen(Qt::red);
painter.drawLine(0,0,600,200);
painter.drawRect(20,20,50,50);
}
