【QT知识】在widget中的绘制事件函数
创始人
2024-01-30 18:46:38
0

在widget中的绘制事件函数

文章目录

    • 1. 代码实现
      • 头文件部分
      • cpp文件部分
    • 2. 事件函数
    • 参考博客


😊点此到文末惊喜↩︎

1. 代码实现

头文件部分

#include 
#include namespace Ui {
class widget_2_1;
}class widget_2_1 : public QWidget
{Q_OBJECTpublic:explicit widget_2_1(QWidget *parent = nullptr);~widget_2_1();void resizeEvent(QResizeEvent *event);bool eventFilter(QObject *obj, QEvent *event);void paintEvent(QPaintEvent *);private://void set_wg2_1_background();
protected:Ui::widget_2_1 *ui;
protected:void keyPressEvent(QKeyEvent *event);};

cpp文件部分


// 绘制事件实现widget上绘制一条直线
void widget_2_1::paintEvent(QPaintEvent *)
{QPainter painter(this); // 这个this很重要painter.drawLine(80, 100, 650, 500);
}
bool widget_2_1::eventFilter(QObject *obj, QEvent *event)
{//1.在构造函数中,调用 installEventFilter()注册监视对象/*例子:zoomCheckBox->installEventFilter(this);*///2.在监视对象的eventFilter()函数中处理目标对象的事件。//如果对象是zoomCheckBox,当鼠标进入(悬停)其上,则zoomTips显示if (obj == (QObject*)ui->zoomCheckBox){if (event->type() == QEvent::Enter){ui->zoomTips->setVisible(true);}else if(event->type() == QEvent::Leave){ui->zoomTips->setVisible(false);}return false;}}

2. 事件函数

  1. void resizeEvent(QResizeEvent *event);
    • 作用:导致窗口发生大小变化或绘制变化的事件产生时会被调用,进行相应的重写和控件调整,避免错误的显示
    • 触发paintEvent事件
      • 窗口大小(重新调整)改变,或者重新排布(布局)导致重画
      • 调用update 或者 repaint重画
      • 当窗口第一次显示时,系统会自动产生绘图事件
      • 当窗口部件被其他部件遮挡时,然后又再次显示出来,会对隐藏区域进行重绘事件
  2. bool eventFilter(QObject *obj, QEvent *event);
    • 作用:事件过滤器,将原本应该直接发送给组件对象的事件,先发送给过滤器对象,经过过滤后再发送给组件对象
    • 实例如上,控件在构造函数中注册,在该事件过滤器函数中处理注册的控件的消息
  3. void paintEvent(QPaintEvent *);// 绘制事件
    • 作用:用来重绘一个部件的全部或者部分区域
    • 重绘事件的触发:
      • repaint()函数或者update()函数被调用
      • 被隐藏的部件现在被重新显示
      • 其他原因
    • 绘制的优化
      • 当update()函数被调用多次,或者窗口系统发送了多个重绘事件,那么Qt就会合并这些事件成为一个事件。可能多个事件只调用一次绘制函数
      • update()函数允许Qt优化速度和减少闪烁,但是repaint()函数不支持这样的优化,所以建议一般情况下尽可能使用update()函数。
      • 在程序开始运行时就会自动发送重绘事件而调用paintEvent()函数
      • 不要在paintEvent()函数中调用update()或者repaint()函数
      • 当重绘事件发生时,要更新的区域一般会被擦除,然后在部件的背景上进行绘制


少年,我观你骨骼清奇,颖悟绝伦,必成人中龙凤。
秘籍(点击图中书籍)·有缘·赠予你


🚩点此跳转到首行↩︎

参考博客

  1. resizeEvent , paintEvent事件触发原因
  2. Qt 事件过滤器 - EventFilter
  3. QT关键问题解决之paintevent理解
  4. 待定引用

相关内容

热门资讯

新年启新程——2026年第一天...   新华社北京1月1日电 题:新年启新程——2026年第一天的劳动者剪影  新华社记者  当时钟的指...
这么暖那么炫!天南地北过新年   什么是跨年顶流?  是传统与现代交融、传承与创新并进、流量与口碑双赢的新文旅。  国家主席习近平...
2026元旦档电影总票房破5亿...   据网络平台数据,截至1月2日14时58分,2026年元旦档档期(1月1日—1月3日)总票房破5亿...
中外对话丨2026年,世界为何...   中新网1月2日电 题:2026年,世界为何更需要中国?  作者:管娜 甘甜  2026年,中国迎...
理响中国・聚焦2026中国经济...   2025年岁末,中央经济工作会议在北京举行。会议总结2025年经济工作,分析当前经济形势,部署2...
免签政策红利持续释放 入境旅游...   过去一年,中国持续扩大免签国家范围。同时,原有的72小时、144小时的过境免签政策也被统一延长到...
微视频|中国,加速向新   时间,是记录奋斗的见证者,也是锻造辉煌的雕刻师。  回望来路,中国创新的每一步都铿锵有力。  眺...
多彩活动“解锁”文化跨年新场景...   央视网消息:元旦假期,在河北廊坊、福建永春以及浙江义乌都有精彩的活动,给人们带来丰富的假期体验。...
全国各大口岸迎来出入境客流高峰...   央视网消息:元旦期间,全国各大口岸迎来出入境客流高峰,相关部门采取不同措施方便旅客通关。  北京...
新华社评论员:续写中国奇迹新篇...   新华社北京1月1日电 题:续写中国奇迹新篇章  新华社评论员  “我们要锚定目标任务,坚定信心、...