Qt之2D绘图

时间:2023-02-18 18:59:39
  • QPaintDevice提供绘图设备,它是一个抽象的二维空间,可以使用QPainter在其上进行绘制;QPaintDevice类是所有可以进行绘制的对象的基类,它的子类主要有QWidget,QPixmap,QImage,QPrinter和QOpenGLPainterDevice等。
  • QPaintEngine则提供了一些接口,用于QPainter和QPaintDevice内部,使得QPainter可以在不同的设备上进行绘制。除了要创建自定义的绘图设备外,一般编程中不需要使用该类。
  • QPainter一般在一个部件重绘事件的处理函数paintEvent()中进行绘制操作。首先创建QPainter对象,图形绘制完成后再销毁QPainter对象。
  • 使用QPainter::QPainter(QPaintDevice * device)构造函数创建的QPainter实例对象会立即开始在设备上进行绘制,自动调用begin()函数,然后在QPainter的析构函数中调用end()函数结束绘制。
  • 如果在构建QPainter对象时不想指定绘图设备,那么可以使用不带参数的构造函数,然后使用QPainter::begin(QPaintDevice * device)开始在指定设备上进行绘制操作,等绘制完成后再调用end()函数结束绘制。
void Widget::paintEvent(QPaintEvent *event){
QPainter painter(this);
painter.drawLine(QPoint(0, 0), QPoint(100, 100));

QPen pen(Qt::green, 5, Qt::DotLine, Qt::RoundCap,
Qt::RoundJoin);
// QPen类的构造函数为QPen::QPen(QBrush, Width, PenStyle,
PenCapStyle, PenJoinStyle)
painter.setPen(pen); // 使用画笔
QRectF rectangle(70.0, 40.0, 80.0, 60.0);// (x, y, width, height)
int startAngle = 30 * 16; // 圆弧的起始角度
int spanAngle = 120 * 16; // 圆弧的张开角度
painter.drawArc(rectangle, startAngle, spanAngle);
}
void Widget::paintEvent(QPaintEvent *event){
QPainter painter; // 使用不带参的构造函数创建QPainter实例对象
painter.begin(this);
painter.drawLine(QPoint(0, 0), QPoint(100, 100));
painter.end();
}

Qt之2D绘图