Qt什么时候触发paintEvent事件
paintEvent事件可以在以下几种情况下被触发:
- 窗口初始化和显示:当窗口首次被创建、显示,或者窗口被覆盖、最小化后再恢复时,paintEvent会被触发以绘制窗口的内容。
- 部件大小或位置变化:如果窗口或部件的大小或位置发生变化,需要重新绘制内容以适应新的尺寸或位置,此时也会触发paintEvent。
- 强制重绘:当调用部件的update()或repaint()函数时,会触发对应部件的paintEvent,强制要求重新绘制。
- 系统事件触发:一些系统事件(比如窗口激活、失去焦点等)可能导致部件的内容需要重新绘制,这时候也会触发paintEvent。
- 当窗口部件被其他窗口部件遮挡,然后又再次显示出来的时候,就会对那些隐藏的区域产生一个绘制事件。
当任何导致窗口或部件需要重新绘制的事件发生时,Qt会发送paintEvent给对应的部件,以便程序员可以重写该事件的处理函数来执行所需的绘制操作。
需要注意的是,对于特定的部件,例如继承自 QWidget 的自定义部件,可以重写其 paintEvent 函数来自定义绘制逻辑.
如下是一个paintEvent事件例子:
#include "widget.h"
#include "ui_widget.h"
#include <QPainter>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);
}Widget::~Widget()
{delete ui;
}void Widget::paintEvent(QPaintEvent *event)
{Q_UNUSED(event)// this是指定给图的对象QPainter painter(this);// 设置抗锯齿painter.setRenderHint(QPainter::Antialiasing);//设置画笔QPen pen;pen.setWidth(5);//pen.setColor(QColor("#888888"));pen.setColor(QColor(200, 100, 50));QBrush brush(QColor(200, 100, 50));///* brush.setColor(QColor(200, 100, 50));*/// 将画刷给画家// painter.setBrush(brush);// 将画笔给画家painter.setPen(pen);// 画矩形painter.drawRect(200, 100, 100, 100);// 多边形QPolygon polygon;polygon.setPoints(3, 100, 20, 200, 50, 300, 300);// 画三角形painter.drawPolygon(polygon);// 画直线painter.drawLine(400, 400, 500, 500);// 画椭圆painter.drawEllipse(200, 200, 50, 100);// 画文字QRectF rectF(0, 0, 200, 100);painter.drawText(rectF, Qt::AlignHCenter, "hello world");// 画路径QPainterPath path;path.moveTo(20, 80);path.lineTo(20, 30);path.cubicTo(80, 0, 50, 50, 80, 80);painter.drawPath(path);
}