其存在的意义:

mywidget.h:

  1. #ifndef MYWIDGET_H
  2. #define MYWIDGET_H
  3.  
  4. #include <QWidget>
  5.  
  6. namespace Ui {
  7. class MyWidget;
  8. }
  9.  
  10. class MyWidget : public QWidget
  11. {
  12. Q_OBJECT
  13.  
  14. public:
  15. explicit MyWidget(QWidget *parent = );
  16. ~MyWidget();
  17. protected:
  18. bool event(QEvent *event);
  19. void timerEvent(QTimerEvent *event);
  20. //事件过滤器
  21. bool eventFilter(QObject *obj, QEvent *e);
  22. private:
  23. Ui::MyWidget *ui;
  24. };
  25.  
  26. #endif // MYWIDGET_H

mywidget.cpp:

  1. #include "mywidget.h"
  2. #include "ui_mywidget.h"
  3. #include <QEvent>
  4. #include<QTimerEvent>
  5. MyWidget::MyWidget(QWidget *parent) :
  6. QWidget(parent),
  7. ui(new Ui::MyWidget)
  8. {
  9. ui->setupUi(this);
  10.  
  11. //安装过滤器
  12. ui->label->installEventFilter(this);
  13.  
  14. }
  15.  
  16. MyWidget::~MyWidget()
  17. {
  18. delete ui;
  19. }
  20. void MyWidget::timerEvent(QTimerEvent *event)
  21. {
  22.  
  23. }
  24. /*
  25. *
  26. */
  27. bool MyWidget::event(QEvent *event)
  28. {
  29. //事件分发
  30. // switch(event->type())
  31. // {
  32. // case QEvent::Close:
  33. // closeEvent();
  34. // break;
  35. // case QEvent::MouseMove:
  36. // mouseMoveEvent();
  37. // break;
  38. // /*
  39. // * ......
  40. // */
  41. // }
  42.  
  43. //关闭定时器
  44. if (event->type() == QEvent::Timer)
  45. {
  46. //干掉定时器
  47. //如果返回true,事件停止传播
  48. //在传参数的时候注意类型是否能够匹配,如这里,定时器事件的参数类型是QTimerEvent *evevt, 而这里的类型是QEvent *event
  49. //故需要进行参数类型的转换
  50. // QTimerEvent *ev= static_cast<QTimerEvent *event>(e);
  51. // timerEvent(ev);
  52. return true;
  53.  
  54. }
  55. else
  56. {
  57. //为了保证其他的事件能够继续的执行,在这里添加return QWidget::event(e);
  58. //能够继续按照原来基类的方式进行处理(传播)。
  59. //如果不添加这句话,其他事件不会起反应。
  60. return QWidget::event(e);
  61. }
  62. }
  63.  
  64. bool MyWidget::eventFilter(QObject *obj, QEvent *e)
  65. {
  66. if (obj == ui->label)
  67. {
  68. QMouseEvent *env = static_cast<QMouseEvent *>(e);
  69. //判断事件
  70. if (e->type() == QEvent::MouseMove)
  71. {
  72. ui->label->setText(QString("mouse move(%1,%2)").arg(env->x()).arg(env->y()));
  73. return true ;//防止事情传播
  74. }
  75. else
  76. {
  77. return QWidget::eventFilter(obj,e);
  78. }
  79. }
  80. else
  81. {
  82. //其他的就按照原来的方式进行处理
  83. return QWidget::eventFilter(obj,e);
  84. }
  85. }

QT+event() + 事件过滤器的更多相关文章

  1. Qt 安装事件过滤器installEventFilter

    Qt 安装事件过滤器installEventFilter (2013-01-28 14:29:18) 转载▼   分类: 工作笔记 Qt的事件模型一个强大的功能是一个QObject对象能够监视发送其他 ...

  2. Qt event()

    event() 今天要说的是 event()函数.记得之前曾经提到过这个函数,说在事件对象创建完毕后,Qt 将这个事件对象传递给 QObject的 event()函数.event()函数并不直接处理事 ...

  3. 【转】QT事件传递与事件过滤器

        [概览] 1.重载特定事件函数.    比如: mousePressEvent(),keyPressEvent(),  paintEvent() .     2.重新实现QObject::ev ...

  4. QT父子窗口事件传递与事件过滤器(讲了一些原理,比较清楚)

    处理监控系统的时候遇到问题,在MainWidget中创建多个子Widget的时候,原意是想鼠标点击先让MainWidget截获处理后再分派给子Widget去处理,但调试后发现如果子Widget重新实现 ...

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

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

  6. qt事件传递过程和处理

    处理监控系统的时候遇到问题,在MainWidget中创建多个子Widget的时候,原意是想鼠标点击先让MainWidget截获处理后再分派给子Widget去处理,但调试后发现如果子Widget重新实现 ...

  7. event system

    事件的概念 简单来说, 就是应用程序感兴趣的应用内部或者外部的活动结果. 在Qt中, 使用QEvent 抽象这些活动. 事件驱动模型 事件驱动模型现在在计算机很多领域都有使用. 例如 BSD sock ...

  8. QT 实现在QLabel上画图

    QT之所以不能再任意控件上绘图是因为QT的事件过滤器把控件的绘图事件给过滤了. 在paintevent()函数中,通常需要设置QPainter对象,创建QPainter对象的同时需要指定绘图设备,即继 ...

  9. QT学习教程

    原地址:http://www.devbean.NET/2012/08/qt-study-road-2-catelog/ 网上看到的不错的教程 本教程以qt5为主,部分地方会涉及qt4.据说非常适合qt ...

随机推荐

  1. 文本主题抽取:用gensim训练LDA模型

    得知李航老师的<统计学习方法>出了第二版,我第一时间就买了.看了这本书的目录,非常高兴,好家伙,居然把主题模型都写了,还有pagerank.一路看到了马尔科夫蒙特卡罗方法和LDA主题模型这 ...

  2. 327. Count of Range Sum(inplace_marge)

    Given an integer array nums, return the number of range sums that lie in [lower, upper] inclusive.Ra ...

  3. 阿里云ECS测试服务器部署

    前序:为了提供一个干净的测试环境,更好地验证产品问题,也为了防止被开发人员频繁发布代码而打断测试工作,故测试团队搭建了一台阿里云ECS服务器,以下是具体的部署信息: 1. 安装JDK Java版本:J ...

  4. 11.Python初窥门径(函数名,可迭代对象,迭代器)

    Python(函数名,可迭代对象,迭代器) 一.默认参数的坑 # 比较特殊,正常来说临时空间执行结束后应该删除,但在这里不是. def func(a,l=[]): l.append(a) return ...

  5. thinkphp5部署到LAMP服务器显示Access denied.

    问题:thinkphp5部署到LAMP服务器,首页正常访问,其余页面访问显示Access denied 解决:1.先把文件夹权限改为777 2. 进入服务器,改文件.将php.ini的值改成1

  6. Centos7.x 安装 pptp

    VPN 1:检查是否支持PPTP #返回OK && echo ok ok 2:安装ppp yum install -y ppp 3:导入EPEL源 rpm -ivh http://dl ...

  7. Codeforces 1152E(欧拉路径)

    看样例然后发现只要求一个一笔画即可,用板子. #include <cstdio> #include <cstring> #include <iostream> #i ...

  8. Uva10755

    在题中的A*B*C的矩形中,当确定X1,X2,Y1,Y2时,1->z的子矩形的和为 sum[x2][y2][1] -(sum[x1-1][y2][1] + sum[x2][y1-1][1] -s ...

  9. NET?.NET Framework?.NET Core?

    什么是.NET?什么是.NET Framework?什么是.NET Core? https://www.cnblogs.com/1996V/p/9037603.html 什么是.NET?什么是.NET ...

  10. 微软官方NET Core 2.0

    NET Core 2.0 微软官方发布的.NET Core 2.0相关的博客: Announcing .NET Standard 2.0 Announcing .NET Core 2.0 F# and ...