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

济南城乡建设网站成色好的y31s标准版下载

济南城乡建设网站,成色好的y31s标准版下载,宿州市做网站的公司,化妆品电子商务网站建设规划书很高兴在雪易的CSDN遇见你 ,给你糖糖 欢迎大家加入雪易社区-CSDN社区云 前言 本文分享QT中的事件Event技术,主要从QT事件流程和常用QT事件方法等方面展开,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞关注,小易…

很高兴在雪易的CSDN遇见你 ,给你糖糖

欢迎大家加入雪易社区-CSDN社区云 


前言

本文分享QT中的事件Event技术,主要从QT事件流程和常用QT事件方法等方面展开,希望对各位小伙伴有所帮助!

感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步!

你的点赞就是我的动力(^U^)ノ~YO

目录

前言

1. QEvent事件概述

2.代码说明事件执行流程

QApplication的notify函数

eventTestWidget

  zxWidget的eventFilter函数

问题1:子级执行了mousePressEvent,而父级未执行

问题2:如何在notify进行事件拦截

问题3:如何在eventFilter中进行事件拦截

问题4:如何在event中进行拦截

结论:


1. QEvent事件概述

        QEvent是QT中所有事件的基类,包括鼠标事件、键盘事件、QPaintEvent重绘事件、Timer事件、Drop事件。

        事件的执行过程:由QApplication对象的exec事件循环监听整个界面中所有控件的发生的事件Event。当某个控件产生相关事件后,QApplication对象会执行notify函数,向此控件发送通知。控件收到事件通知后,会进行事件过滤(eventFilter)和事件分发(event)最后到达事件处理函数。

2.代码说明事件执行流程

以Widget为例进行说明

QApplication的notify函数

        重写notify函数

bool zxApplication::notify(QObject *obj, QEvent *e)
{if(e->type() == QEvent::MouseButtonPress){qDebug()<<"notify: "<<obj->objectName()<<" "<<e->type()<<endl;//return true;}return QApplication::notify(obj, e);
}

eventTestWidget

void eventTestWidget::mousePressEvent(QMouseEvent *ev)
{qDebug()<<"eventTestWidget::mousePressEvent "<<endl;
}bool eventTestWidget::event(QEvent *event)
{qDebug()<<"eventTestWidget::event "<< event->type()<<endl;return QWidget::event(event);
}bool eventTestWidget::eventFilter(QObject *obj, QEvent *ev)
{if(obj == ui->widget && ev->type()==QEvent::MouseButtonPress){qDebug()<<"eventTestWidget::eventFilter widget "<< ev->type()<<endl;return false;}return QWidget::eventFilter(obj, ev);
}

  zxWidget的eventFilter函数

        重写eventFilter函数

void zxWidget::mousePressEvent(QMouseEvent *ev)
{qDebug()<<"zxWidget::mousePressEvent "<<endl;QWidget::mousePressEvent(ev);
}bool zxWidget::event(QEvent *event)
{qDebug()<<"zxWidget::event "<< event->type()<<endl;return QWidget::event(event);
}bool zxWidget::eventFilter(QObject *obj, QEvent *ev)
{if(ev->type()==QEvent::MouseButtonPress){qDebug()<<"zxWidget::eventFilter "<< ev->type()<<endl;return false;}return QWidget::eventFilter(obj, ev);
}

当在widget中点击鼠标左键时,触发

//第一步:Application的notify,接收到 mouseBottonPress事件,顺序:父级-》子级
notify:  "eventTestWidgetWindow"   QEvent::MouseButtonPress notify:  "widget"   QEvent::MouseButtonPress //第二步:父级窗口eventFilter执行事件过滤
eventTestWidget::eventFilter widget  QEvent::MouseButtonPress //第三步:子级窗口event执行事件分发
zxWidget::event  QEvent::MouseButtonPress //第四步:子级窗口执行事件
zxWidget::mousePressEvent  

问题1:子级执行了mousePressEvent,而父级未执行

解决方案:添加event->ignore();表示将事件继续传输给父级节点。

void zxWidget::keyPressEvent(QKeyEvent *event)
{qDebug()<< this->objectName()<<" keyPress"<<endl;QWidget::keyPressEvent(event);event->ignore();
}

此时的输出:

notify:  "eventTestWidgetWindow"   QEvent::MouseButtonPress notify:  "widget"   QEvent::MouseButtonPress eventTestWidget::eventFilter widget  QEvent::MouseButtonPress zxWidget::event  QEvent::MouseButtonPress zxWidget::mousePressEvent  eventTestWidget::event  QEvent::MouseButtonPress eventTestWidget::mousePressEvent  

问题2:如何在notify进行事件拦截

解决方案:筛选出指定事件后,返回True;

bool zxApplication::notify(QObject *obj, QEvent *e)
{if(e->type() == QEvent::MouseButtonPress){qDebug()<<"notify: "<<obj->objectName()<<" "<<e->type()<<endl;return true;}return QApplication::notify(obj, e);
}

此时输出

notify:  "eventTestWidgetWindow"   QEvent::MouseButtonPress 

*若在QApplication的notify函数中对某个事件进行了拦截,则eventFilter中不会在接收到此函数。子对象也不会接收到该事件的通知。

问题3:如何在eventFilter中进行事件拦截

解决方案:

bool eventTestWidget::eventFilter(QObject *obj, QEvent *ev)
{if(obj == ui->widget && ev->type()==QEvent::MouseButtonPress){qDebug()<<"eventTestWidget::eventFilter widget "<< ev->type()<<endl;return true;}return QWidget::eventFilter(obj, ev);
}

此时输出

notify:  "eventTestWidgetWindow"   QEvent::MouseButtonPress notify:  "widget"   QEvent::MouseButtonPress eventTestWidget::eventFilter widget  QEvent::MouseButtonPress 

*在父级的eventFilter中进行事件拦截,则该事件不会传输至子对象。

问题4:如何在event中进行拦截

解决方法

bool zxWidget::event(QEvent *event)
{qDebug()<<"zxWidget::event "<< event->type()<<endl;if(event->type()==QEvent::MouseButtonPress){return true;}return QWidget::event(event);
}

此时输出

notify:  "eventTestWidgetWindow"   QEvent::MouseButtonPress notify:  "widget"   QEvent::MouseButtonPress eventTestWidget::eventFilter widget  QEvent::MouseButtonPress zxWidget::event  QEvent::MouseButtonPress 

*在事件分发时进行事件拦截,故而没有执行该事件。

结论:

        该文主要介绍了QT中事件的传输和拦截机制。

关联资源:QT开发+Event事件机制+事件监控、传输、过滤和分发机制资源-CSDN文库

小伙伴可以联系我获取哦

感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步!

你的赞赏是我的最最最最大的动力(^U^)ノ~YO

http://www.yayakq.cn/news/348847/

相关文章:

  • cn免费域名注册网站帝国cms更改网站ico
  • 化工网站开发如何给公司做一个网站
  • 做网站开发需要学哪些东西梧州论坛组织参观活动
  • 营口网站建设开发制作做违法网站会怎么样
  • 个人网站建站网架公司股价
  • 网站公司 转型电子商务网站建设和推广论文
  • ui设计师怎么做简历网站宣传推广文案
  • 适用于个人网站的域名手机ps网页版在线制作
  • 我是做装修什么网站可以百度推广引流
  • 网站建设方案报价网站建设中 单页
  • 辛集哪做网站做问卷调查赚钱的网站
  • 网站默认图片素材深圳网站设计深圳网站建设
  • 赤峰浩诚网站建设有限公司wordpress漫画商城
  • 网站路径网页程序开发学什么语言
  • 商务网站设计实训报告境外注册网站
  • 石家庄网站建设成功案例微信开放平台开发者
  • 贵阳网络公司网站建设sem广告投放是做什么的
  • 网站建设公司豆瓣深圳网络公司推广公司
  • 网站要实名认证成都住建局官网报名被挤爆黑幕
  • 做网站用什么开源苍南网站开发
  • 成都网站建设空间重庆网站建设 制作 设计 优惠价
  • 自己如何免费制作一个网站图书馆网站开发策划书
  • 网站的开发建设要做什么免费的外网服务器
  • 网站开发语言分析百度指数查询
  • 高邮市建设局网站photoshop在线修图
  • 公司网站开发款记什么科目佛山外贸网站建设渠道
  • 三门峡 网站开发企业宣传片的制作流程
  • 网站建设规划书百度文库团购网站前景
  • 建立网站需要多少钱萍畜湖南岚鸿首选网站调研怎样做
  • 大型网站建设优化企业网站建设图片logo