当前位置: 首页 > news >正文 网站后台建设重庆博达建设集团股份有限公司网站 news 2025/11/5 21:49:19 网站后台建设,重庆博达建设集团股份有限公司网站,如何禁止通过ip访问网站,给女朋友做的网站QT之事件系统1. 概述2. 事件的传递3. 事件类型4. 事件处理与事件过滤5. 自定义事件5.1 Demo6. 发送事件7. 参考1. 概述 在QT中#xff0c;事件均派生自QEvent抽象类#xff0c;事件可以由任何派生自QObject的子类实例接收和处理。它们与widget关联性极强。 2. 事件的传递 … QT之事件系统1. 概述2. 事件的传递3. 事件类型4. 事件处理与事件过滤5. 自定义事件5.1 Demo6. 发送事件7. 参考1. 概述 在QT中事件均派生自QEvent抽象类事件可以由任何派生自QObject的子类实例接收和处理。它们与widget关联性极强。 2. 事件的传递 当事件发生时QT 通过构造适当的 QEvent 子类实例来创建一个事件对象来表示它并通过调用其 event() 函数将其传递给 QObject 的特定实例 event() 函数本身不处理事件它根据传递的事件类型它会调用该特定类型事件的事件处理程序并根据事件是被接受还是被忽略来发送响应。 传递的顺序如下 3. 事件类型 大多数事件类型都有特殊的类特别是 QResizeEvent、QPaintEvent、QMouseEvent、QKeyEvent 和 QCloseEvent。 每个类都是 QEvent 的子类并添加特定于事件的函数。 例如QResizeEvent 添加了 size() 和 oldSize() 以使小部件能够发现它们的尺寸是如何改变的。 每个事件都有一个关联的类型在 QEvent::Type 中定义这可以用作运行时类型信息的方便来源以快速确定给定事件对象是从哪个子类构造的。 具体的事件类型可参考官网介绍 4. 事件处理与事件过滤 常用的事件处理方式如下 重写各种事件的虚函数 如paintEvent()、mousePressEvent()等。这是最常见的方式同时也是最简单和功能最弱的方式重写event()函数 event()函数是所有对象的事件入口QObject和QWidget中的实现默认是把事件传递给特定的事件处理函数在特定对象上面安装事件过滤器 该过滤器仅过滤该对象接收到的事件。在QCoreApplication::instance()上面安装事件过滤器 该过滤器将过滤所有对象的所有事件因此和notify()函数一样强大但是它更灵活因为可以安装多个过滤器。全局的事件过滤器可以看到 disabled 组件上面发出的鼠标事件。全局过滤器有一个问题只能用在主线程。重写QCoreApplication::notify()函数 这是最强大的和全局事件过滤器一样提供完全控制并且不受线程的限制。但是全局范围内只能有一个被使用因为QCoreApplication是单例的 Qt 调用 QApplication 来发送一个事件重新实现 notify()函数是在事件过滤器得到所有事件之前获得它们的唯一方法。事件过滤器使用更为便利。因为可以同时有多个事件过滤器。而 notify()函数只有一个。 5. 自定义事件 QT自定义事件的创建步骤如下 继承QEvent类定义一个事件类型的两种方式 QT中有两个宏用来定义了用户事件的最大边界(QEvent::MaxUser)和最小边界(QEvent::User)向QT事件系统注册自定义事件类型 在上述步骤中可以创建出一个与系统事件类型不冲突的自定义事件类型但是无法保证自定义事件类型不冲突。因此需要将自定义事件类型注册到QT事件系统中这样若有相同的类型再次被注册时QT事件系统就可以处理自定义事件类型冲突的问题。注册函数如下// 线程安全 // registerEventType 若传入参数可用则返回此参数否则返回QEvent::MaxUser和QEvent::User之间的值若参数不在QEvent::MaxUser和QEvent::User之间则忽略参数 static int QEvent::registerEventType ( int hint -1 );5.1 Demo myevent.h#ifndef MYEVENT_H #define MYEVENT_H#include QEventclass MyEvent : public QEvent { public:MyEvent();int getValue();static Type eventType; private:int m_value; };#endif // MYEVENT_H myevent.cpp#include myevent.hQEvent::Type MyEvent::eventType (QEvent::Type)QEvent::registerEventType(); MyEvent::MyEvent(): QEvent(eventType),m_value(1) { }int MyEvent::getValue() {return m_value; } mainwindow.h#ifndef MAINWINDOW_H #define MAINWINDOW_H#include QMainWindowQT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACEclass MainWindow : public QMainWindow {Q_OBJECTpublic:MainWindow(QWidget *parent nullptr);~MainWindow();virtual bool event(QEvent *event) override; protected:// 自定义事件的处理(专门处理自定义事件的)也可以用event()函数处理virtual void customEvent(QEvent *event) override; private:Ui::MainWindow *ui; }; #endif // MAINWINDOW_H mainwindow.cpp#include mainwindow.h #include ui_mainwindow.h #include myevent.h #include QDebugMainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui-setupUi(this);MyEvent* myEvent new MyEvent;// 事件只能定义在堆上不用手动释放系统会自动释放qApp-postEvent(this,myEvent); }MainWindow::~MainWindow() {delete ui; }bool MainWindow::event(QEvent *event) {QEvent::Type eventType event-type();if(eventType MyEvent::eventType){MyEvent* myEvent dynamic_castMyEvent*(event);qDebug() event eventType ;qDebug() event myEvent-getValue() ;event-ignore();}// 处理完成后继续传播事件这样customEvent就会收到自定义事件return QObject::event(event); }void MainWindow::customEvent(QEvent *event) {QEvent::Type eventType event-type();if(eventType MyEvent::eventType){// 这里默认是trueqDebug() customEvent event-isAccepted();MyEvent* myEvent dynamic_castMyEvent*(event);qDebug() customEvent eventType ;qDebug() customEvent myEvent-getValue() ;//event-accept();} }event()处理事件的时机比customEvent()处理的早 6. 发送事件 sendEvent() sendEvent() 立即处理事件。 当它返回时事件过滤器和/或对象本身已经处理了该事件。 对于许多事件类有一个名为 isAccepted() 的函数可以告诉您事件是被调用的最后一个处理程序接受还是拒绝。postEvent() postEvent() 将事件发布到队列中以供稍后分派。 下次 Qt 的主事件循环运行时它会调度所有已发布的事件并进行一些优化。 例如如果有多个调整大小事件它们将被压缩为一个。 这同样适用于绘制事件QWidget::update() 调用 postEvent()它通过避免多次重绘来消除闪烁并提高速度。 7. 参考 QT事件处理–notify()https://blog.csdn.net/qq_40729688/article/details/89500394官方事件系统介绍文档 文章转载自: http://www.morning.sgqw.cn.gov.cn.sgqw.cn http://www.morning.yrbhf.cn.gov.cn.yrbhf.cn http://www.morning.wbyqy.cn.gov.cn.wbyqy.cn http://www.morning.lwtld.cn.gov.cn.lwtld.cn http://www.morning.kybpj.cn.gov.cn.kybpj.cn http://www.morning.leboju.com.gov.cn.leboju.com http://www.morning.dqxph.cn.gov.cn.dqxph.cn http://www.morning.fwrr.cn.gov.cn.fwrr.cn http://www.morning.jmbfx.cn.gov.cn.jmbfx.cn http://www.morning.ynbyk.cn.gov.cn.ynbyk.cn http://www.morning.bqwnp.cn.gov.cn.bqwnp.cn http://www.morning.jrgxx.cn.gov.cn.jrgxx.cn http://www.morning.tjndb.cn.gov.cn.tjndb.cn http://www.morning.znqmh.cn.gov.cn.znqmh.cn http://www.morning.bpmnj.cn.gov.cn.bpmnj.cn http://www.morning.wqfzx.cn.gov.cn.wqfzx.cn http://www.morning.0dirty.cn.gov.cn.0dirty.cn http://www.morning.jbctp.cn.gov.cn.jbctp.cn http://www.morning.rmqlf.cn.gov.cn.rmqlf.cn http://www.morning.zjqwr.cn.gov.cn.zjqwr.cn http://www.morning.ljzgf.cn.gov.cn.ljzgf.cn http://www.morning.fbpdp.cn.gov.cn.fbpdp.cn http://www.morning.rmltt.cn.gov.cn.rmltt.cn http://www.morning.jhxdj.cn.gov.cn.jhxdj.cn http://www.morning.tongweishi.cn.gov.cn.tongweishi.cn http://www.morning.gypcr.cn.gov.cn.gypcr.cn http://www.morning.bkfdf.cn.gov.cn.bkfdf.cn http://www.morning.dnjwm.cn.gov.cn.dnjwm.cn http://www.morning.sbwr.cn.gov.cn.sbwr.cn http://www.morning.knnc.cn.gov.cn.knnc.cn http://www.morning.sfphz.cn.gov.cn.sfphz.cn http://www.morning.cykqb.cn.gov.cn.cykqb.cn http://www.morning.ysqb.cn.gov.cn.ysqb.cn http://www.morning.kfcfq.cn.gov.cn.kfcfq.cn http://www.morning.prznc.cn.gov.cn.prznc.cn http://www.morning.ysbhj.cn.gov.cn.ysbhj.cn http://www.morning.hcsqznn.cn.gov.cn.hcsqznn.cn http://www.morning.hjjkz.cn.gov.cn.hjjkz.cn http://www.morning.rhnn.cn.gov.cn.rhnn.cn http://www.morning.jkmjm.cn.gov.cn.jkmjm.cn http://www.morning.pqcsx.cn.gov.cn.pqcsx.cn http://www.morning.qczpf.cn.gov.cn.qczpf.cn http://www.morning.bhqlj.cn.gov.cn.bhqlj.cn http://www.morning.plqqn.cn.gov.cn.plqqn.cn http://www.morning.sgrwd.cn.gov.cn.sgrwd.cn http://www.morning.nqxdg.cn.gov.cn.nqxdg.cn http://www.morning.zmqb.cn.gov.cn.zmqb.cn http://www.morning.xjnjb.cn.gov.cn.xjnjb.cn http://www.morning.rkzk.cn.gov.cn.rkzk.cn http://www.morning.lkcqz.cn.gov.cn.lkcqz.cn http://www.morning.bzlgb.cn.gov.cn.bzlgb.cn http://www.morning.rnwt.cn.gov.cn.rnwt.cn http://www.morning.tgbx.cn.gov.cn.tgbx.cn http://www.morning.skrh.cn.gov.cn.skrh.cn http://www.morning.hksxq.cn.gov.cn.hksxq.cn http://www.morning.mhsmj.cn.gov.cn.mhsmj.cn http://www.morning.nnhrp.cn.gov.cn.nnhrp.cn http://www.morning.rtkz.cn.gov.cn.rtkz.cn http://www.morning.wklrz.cn.gov.cn.wklrz.cn http://www.morning.hprmg.cn.gov.cn.hprmg.cn http://www.morning.lhrxq.cn.gov.cn.lhrxq.cn http://www.morning.llllcc.com.gov.cn.llllcc.com http://www.morning.fgsct.cn.gov.cn.fgsct.cn http://www.morning.bphqd.cn.gov.cn.bphqd.cn http://www.morning.gslz.com.cn.gov.cn.gslz.com.cn http://www.morning.lsnhs.cn.gov.cn.lsnhs.cn http://www.morning.jydhl.cn.gov.cn.jydhl.cn http://www.morning.lxhgj.cn.gov.cn.lxhgj.cn http://www.morning.qsdnt.cn.gov.cn.qsdnt.cn http://www.morning.slpcl.cn.gov.cn.slpcl.cn http://www.morning.rylr.cn.gov.cn.rylr.cn http://www.morning.dwkfx.cn.gov.cn.dwkfx.cn http://www.morning.zbqry.cn.gov.cn.zbqry.cn http://www.morning.tbjtm.cn.gov.cn.tbjtm.cn http://www.morning.jfcbz.cn.gov.cn.jfcbz.cn http://www.morning.qphcq.cn.gov.cn.qphcq.cn http://www.morning.hxrg.cn.gov.cn.hxrg.cn http://www.morning.ghjln.cn.gov.cn.ghjln.cn http://www.morning.pjxlg.cn.gov.cn.pjxlg.cn http://www.morning.qdcpn.cn.gov.cn.qdcpn.cn 查看全文 http://www.tj-hxxt.cn/news/280518.html 相关文章: 嘉兴网站建设正规公司北京网站设计价格 服务网站排名咨询安卓 wordpress 网站怎么做微信扫描登录网站北京市建设网站 哪里卖网站域名旅游网站设计代码html 建设银行手机银行网站用户名是什么做公章网站 销售网站建设赚钱吗招牌设计 创意logo 青岛胶南做网站的有多少网页升级访问自动 商丘网站优化公司优化网哪个牌子好 赣州人才网站专业简历模板 网络优化与维护是做什么关键词优化平台有哪些 教育网站开发公司简述网站建设过程步骤 专注高密网站建设收录快的网站 做网站长沙网站的专业 公司长沙建站布展设计公司 制作网站公司 英语网站首页私密浏览器免费版在线看视频 小说章节收费网站建设一个网站建设的目标 蓝韵官方网站赚钱黑渠道入口 鄱阳有做百度网站的泰州建设企业网站 寻找郑州网站建设手机网站菜单设计模板 点击未来网站建设网站建设沈阳公司哪家好 高港网站开发应用大全网站 网站联系我们的地图怎么做快对小程序入口 篇高端网站愿建设做企业网站制作 网站开发主管岗位职责高清视频素材 国土网站建设自查报告秀米编辑器官网 甘肃网站定制开发重庆市工程建筑造价信息网 郑州建设企业网站wordpress安装到跟目录 电子商务网站的作用有哪些云服务器做网站好吗 买了空间和域名 怎么做网站贵州遵义网 机关单位 网站建设方案策划书深圳网站建设如何制作