Qt什么时候触发paintEvent事件

‌paintEvent事件可以在以下几种情况下被触发‌:

  1. ‌窗口初始化和显示‌:当窗口首次被创建、显示,或者窗口被覆盖、最小化后再恢复时,paintEvent会被触发以绘制窗口的内容。
  2. ‌部件大小或位置变化‌:如果窗口或部件的大小或位置发生变化,需要重新绘制内容以适应新的尺寸或位置,此时也会触发paintEvent。
  3. ‌强制重绘‌:当调用部件的update()或repaint()函数时,会触发对应部件的paintEvent,强制要求重新绘制。
  4. ‌系统事件触发‌:一些系统事件(比如窗口激活、失去焦点等)可能导致部件的内容需要重新绘制,这时候也会触发paintEvent。
  5. 当窗口部件被其他窗口部件遮挡,然后又再次显示出来的时候,就会对那些隐藏的区域产生一个绘制事件。

当任何导致窗口或部件需要重新绘制的事件发生时,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);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值