当前位置: 首页 > article >正文

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);
}



http://www.kler.cn/a/301338.html

相关文章:

  • RabbitMQ的基本概念和入门
  • css 使用图片作为元素边框
  • 支付域——新零售支付
  • 鸿蒙实战:页面跳转
  • PlantUML——时序图
  • 【软件测试】设计测试用例的万能公式
  • 【论文笔记】NDT: Neural Data Transformers (NBDT, 2022)
  • 一些深度学习相关指令
  • 【Qt】按钮样式--按钮内部布局(调整按钮文本和图标放置在任意位置)
  • 上海亚商投顾:沪指探底回升 华为产业链午后爆发
  • 【深度学习讲解笔记】第1章-机器学习基础(3)
  • Oracle Data Guard:Oracle数据库的高可用性和灾难恢复解决方案
  • 最近试用了FunHPC-AI宝箱-ComfyUI-Plus,使用了dreamshaperXL全能模型,生成了几张国风图,效果真的让人惊叹!
  • 安装MongoDB
  • 企业数字化转型、建设和升级面临的主要难题和解决之道(2)
  • 【机器学习】模型性能与可解释性的矛盾以及如何提高可解释性和模型性能
  • Java设计模式之命令模式介绍和案例示范
  • Chainlit集成Langchain并使用通义千问实现文生图网页应用
  • 20240912日报
  • Unity界面、组件以及脚本
  • 【人工智能学习笔记】4_1 深度学习基础之深度学习概述
  • 【区块链通用服务平台及组件】数字城市元宇宙平台 | FISCO BCOS应用案例
  • 模拟实现计算器(switch函数实现与转移表实现)
  • The Linux Command Line中文版阅读——1-3章
  • 【最新华为OD机试E卷-支持在线评测】计算疫情扩散时间(200分)多语言题解-(Python/C/JavaScript/Java/Cpp)
  • 韩国客户到访国信华源 共谋合作新篇章