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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Selenium 实现图片验证码识别
  • 封装智能指针 qt实现登录界面
  • 衡石分析平台使用手册-部署前准备
  • 如何快速撰写毕业论文任务书
  • 遍历有向网络链路实现
  • 初学者如何掌握python
  • nlohmann::json中有中文时调用dump转string抛出异常的问题
  • 瑞吉外卖—读写分离
  • 机器学习:opencv图像识别--模版匹配
  • 华为OD机试真题E卷-计算网络信号(含题目描述+解题思路+代码解析)
  • 前端打包装包——设置镜像
  • 机试算法模拟题 服务中心选址
  • 利用命令模式构建高效的手游后端架构
  • Reflection反射——Class类
  • 大模型训练数据库Common Crawl
  • 【刷算法】求1+2+3+...+n
  • Angular 4.x 动态创建组件
  • co模块的前端实现
  • Elasticsearch 参考指南(升级前重新索引)
  • ES10 特性的完整指南
  • Java|序列化异常StreamCorruptedException的解决方法
  • JSONP原理
  • laravel 用artisan创建自己的模板
  • Python十分钟制作属于你自己的个性logo
  • QQ浏览器x5内核的兼容性问题
  • Service Worker
  • SOFAMosn配置模型
  • tab.js分享及浏览器兼容性问题汇总
  • windows下如何用phpstorm同步测试服务器
  • 百度地图API标注+时间轴组件
  • 检测对象或数组
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 什么软件可以剪辑音乐?
  • 一文看透浏览器架构
  • ​2020 年大前端技术趋势解读
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • # 达梦数据库知识点
  • $.ajax()
  • (1)STL算法之遍历容器
  • (1)常见O(n^2)排序算法解析
  • (35)远程识别(又称无人机识别)(二)
  • (二)pulsar安装在独立的docker中,python测试
  • (分类)KNN算法- 参数调优
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (九十四)函数和二维数组
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (未解决)macOS matplotlib 中文是方框
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .Family_物联网
  • .L0CK3D来袭:如何保护您的数据免受致命攻击