1. MyPushButton.h:
  1. #ifndef MYPUSHBUTTON_H
  2. #define MYPUSHBUTTON_H
  3. #include<QPushButton>
  4. #include<QEvent>
  5. #include<QMouseEvent>
  6. class MyPushButton : public QPushButton
  7. {
  8. public:
  9. MyPushButton();
  10. MyPushButton(const QString& text,QWidget *parent=nullptr);
  11. bool event(QEvent *e);
  12. void mousePressEvent(QMouseEvent *e);
  13. };
  14.  
  15. #endif // MYPUSHBUTTON_H
  1. MyPushButton.cpp:
  1. #include "MyPushButton.h"
  2. #include<QWidget>
  3. #include<QDebug>
  4. MyPushButton::MyPushButton(const QString& text,QWidget *parent)
  5. :QPushButton(text,parent)
  6. {
  7. }
  8. bool MyPushButton::event(QEvent *e)
  9. {
  10. if(e->type()==QEvent::MouseButtonPress)
  11. {
  12. QMouseEvent *x=static_cast<QMouseEvent*>(e);
  13. mousePressEvent(x);
  14. //e->ignore();
  15. //e->accept();
  16. return false; //表示我不处理这个事件
  17. //return true; //表示我处理了这个事件
  18. }
  19. return QWidget::event(e);
  20. }
  21. void MyPushButton::mousePressEvent(QMouseEvent *e)
  22. {
  23.  
  24. qDebug()<<"子类的事件执行"<<endl;
  25. }
  26.  
  27. MyPushButton::MyPushButton()
  28. {
  29.  
  30. }

Widget.h:

  1. #ifndef WIDGET_H
  2. #define WIDGET_H
  3. #include <QWidget>
  4. #include "MyPushButton.h"
  5. class Widget : public QWidget
  6. {
  7. Q_OBJECT
  8.  
  9. public:
  10. Widget(QWidget *parent = 0);
  11. ~Widget();
  12. bool event(QEvent *e);
  13. void mousePressEvent(QMouseEvent *e);
  14. private:
  15. MyPushButton *mypushbutton;
  16. };
  17.  
  18. #endif // WIDGET_H

Widget.cpp:

  1. #include "widget.h"
  2. #include<QDebug>
  3. Widget::Widget(QWidget *parent)
  4. : QWidget(parent)
  5. {
  6. mypushbutton=new MyPushButton("按钮",this);
  7. }
  8.  
  9. bool Widget::event(QEvent *e)
  10. {
  11. return QWidget::event(e);
  12. }
  13.  
  14. void Widget::mousePressEvent(QMouseEvent *e)
  15. {
  16. qDebug()<<"父类的事件执行"<<endl;
  17. }
  18.  
  19. Widget::~Widget()
  20. {
  21.  
  22. }

main.cpp:

  1. #include "widget.h"
  2. #include <QApplication>
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6. QApplication a(argc, argv);
  7. Widget w;
  8. w.show();
  9.  
  10. return a.exec();
  11. }

效果:

QT之事件机制的更多相关文章

  1. 剖析Qt的事件机制原理

    版权声明 请尊重原创作品.转载请保持文章完整性,并以超链接形式注明原始作者“tingsking18”和主站点地址,方便其他朋友提问和指正. QT源码解析(一) QT创建窗口程序.消息循环和WinMai ...

  2. 剖析Qt的事件机制原理(源代码级别)

    在用Qt写Gui程序的时候,在main函数里面最后依据都是app.exec();很多书上对这句的解释是,使Qt程序进入消息循环.下面我们就到exec()函数内部,来看一下他的实现原理.Let's go ...

  3. Qt 事件系统浅析 (用 Windows API 描述,分析了QCoreApplication::exec()和QEventLoop::exec的源码)(比起新号槽,事件机制是更高级的抽象,拥有更多特性,比如 accept/ignore,filter,还是实现状态机等高级 API 的基础)

    事件系统在 Qt 中扮演了十分重要的角色,不仅 GUI 的方方面面需要使用到事件系统,Signals/Slots 技术也离不开事件系统(多线程间).我们本文中暂且不描述 GUI 中的一些特殊情况,来说 ...

  4. QT源码之Qt信号槽机制与事件机制的联系

    QT源码之Qt信号槽机制与事件机制的联系是本文要介绍的内容,通过解决一个问题,从中分析出的理论,先来看内容. 本文就是来解决一个问题,就是当signal和slot的连接为Qt::QueuedConne ...

  5. qt事件机制(转)

    学习了一段时间的Qt之后,发现Qt的事件机制和其他语言的机制有些不同.Qt除了能够通过信号和槽机制来实现一些Action动作之外,还可以用对象所带的事件,或者用户自定义的事件来实现对象的一些行为处理. ...

  6. Qt的事件

    Qt的事件机制 事件过滤器: 可以让一个对象侦听拦截另外一个对象的事件. 实现原理: 在所有Qt对象的基类:QObject中有一个 类型为:QObjectList 名字为:eventFilters 的 ...

  7. Qt事件机制浅析(定义,产生,异步事件循环,转发,与信号的区别。感觉QT事件与Delphi的事件一致,而信号则与Windows消息一致)

    Qt事件机制 Qt程序是事件驱动的, 程序的每个动作都是由幕后某个事件所触发.. Qt事件的发生和处理成为程序运行的主线,存在于程序整个生命周期. Qt事件的类型很多, 常见的qt的事件如下: 键盘事 ...

  8. Qt 事件机制

    [1]事件 事件是可以被控件识别的操作.如按下确定按钮.选择某个单选按钮或复选框. 每种控件有自己可识别的事件,如窗体的加载.单击.双击等事件,编辑框(文本框)的文本改变事件等等. 事件就是用户对窗口 ...

  9. 详解 QT 源码之 Qt 事件机制原理

    QT 源码之 Qt 事件机制原理是本文要介绍的内容,在用Qt写Gui程序的时候,在main函数里面最后依据都是app.exec();很多书上对这句的解释是,使 Qt 程序进入消息循环.下面我们就到ex ...

随机推荐

  1. flutter 学习笔记

    常用属性 container 填充padding,边距margins,边框borders,背景色color, decoration: 渐变gradient-Alignment(x,y),圆角borde ...

  2. centos使用docker安装mysql5.7

    搜索镜像 docker search mysql 拉取镜像 docker pull mysql:5.7 启动mysql镜像 docker run -p 3306:3306 --name mysql - ...

  3. IDEA 修改之前保存的git地址的账号和密码

    1.打开控制面板 快捷键 win+R,然后输入control,打开控制面板 2.用户账户 3.管理windows凭据 4.点击里面的git就可以修改了

  4. JAVA判断URL地址是否非法

    /** * 判断请求url是否非法 * @param url * @return */ public static boolean isValidRequestUri(String url) { if ...

  5. 🍃【Spring专题】「原理系列」SpringMVC的运行工作原理(补充修订)

    承接相关之前的SpringMVC的框架技术的流程分析 初始化流程(initStrategies) 执行流程 寻找相关HandlerMapping 请求到DispatcherServlet类进行执行相关 ...

  6. 菜鸟物流的运输网络(计蒜客复赛F)

    菜鸟物流有自己的运输网络,网络中包含 nn 个城市物流集散中心,和 mm 对城市之间的运输线路(线路是双向的).菜鸟物流允许淘宝卖家自行确定包裹的运输路径,但只有一条限制规则:不允许经过重复的城市.淘 ...

  7. 1269 - Consecutive Sum

    1269 - Consecutive Sum    PDF (English) Statistics Forum Time Limit: 3 second(s) Memory Limit: 64 MB ...

  8. BZOJ 1857: [Scoi2010]传送带(三分套三分)

    Time Limit: 1 Sec Memory Limit: 64 MB Submit: 2549 Solved: 1370 [Submit][Status][Discuss] Descriptio ...

  9. 第三十个知识点:大致简述密钥协商中的BR安全定义。

    第三十个知识点:大致简述密钥协商中的BR安全定义. 在两方之间建密钥共享是一件密码学中古老的问题.就算只考虑定义也比标准加密困难的多.尽管古典的Diffie-Hellman协议在1976年思路解决了这 ...

  10. 数据结构作业——P53算法设计题(6):设计一个算法,通过一趟遍历确定长度为n的单链表中值最大的结点

    思路: 设单链表首个元素为最大值max 通过遍历元素,与最大值max作比较,将较大值附给max 输出最大值max 算法: /* *title:P53页程序设计第6题 *writer:weiyuexin ...