QT+event() + 事件过滤器
其存在的意义:
mywidget.h:
- #ifndef MYWIDGET_H
- #define MYWIDGET_H
- #include <QWidget>
- namespace Ui {
- class MyWidget;
- }
- class MyWidget : public QWidget
- {
- Q_OBJECT
- public:
- explicit MyWidget(QWidget *parent = );
- ~MyWidget();
- protected:
- bool event(QEvent *event);
- void timerEvent(QTimerEvent *event);
- //事件过滤器
- bool eventFilter(QObject *obj, QEvent *e);
- private:
- Ui::MyWidget *ui;
- };
- #endif // MYWIDGET_H
mywidget.cpp:
- #include "mywidget.h"
- #include "ui_mywidget.h"
- #include <QEvent>
- #include<QTimerEvent>
- MyWidget::MyWidget(QWidget *parent) :
- QWidget(parent),
- ui(new Ui::MyWidget)
- {
- ui->setupUi(this);
- //安装过滤器
- ui->label->installEventFilter(this);
- }
- MyWidget::~MyWidget()
- {
- delete ui;
- }
- void MyWidget::timerEvent(QTimerEvent *event)
- {
- }
- /*
- *
- */
- bool MyWidget::event(QEvent *event)
- {
- //事件分发
- // switch(event->type())
- // {
- // case QEvent::Close:
- // closeEvent();
- // break;
- // case QEvent::MouseMove:
- // mouseMoveEvent();
- // break;
- // /*
- // * ......
- // */
- // }
- //关闭定时器
- if (event->type() == QEvent::Timer)
- {
- //干掉定时器
- //如果返回true,事件停止传播
- //在传参数的时候注意类型是否能够匹配,如这里,定时器事件的参数类型是QTimerEvent *evevt, 而这里的类型是QEvent *event
- //故需要进行参数类型的转换
- // QTimerEvent *ev= static_cast<QTimerEvent *event>(e);
- // timerEvent(ev);
- return true;
- }
- else
- {
- //为了保证其他的事件能够继续的执行,在这里添加return QWidget::event(e);
- //能够继续按照原来基类的方式进行处理(传播)。
- //如果不添加这句话,其他事件不会起反应。
- return QWidget::event(e);
- }
- }
- bool MyWidget::eventFilter(QObject *obj, QEvent *e)
- {
- if (obj == ui->label)
- {
- QMouseEvent *env = static_cast<QMouseEvent *>(e);
- //判断事件
- if (e->type() == QEvent::MouseMove)
- {
- ui->label->setText(QString("mouse move(%1,%2)").arg(env->x()).arg(env->y()));
- return true ;//防止事情传播
- }
- else
- {
- return QWidget::eventFilter(obj,e);
- }
- }
- else
- {
- //其他的就按照原来的方式进行处理
- return QWidget::eventFilter(obj,e);
- }
- }
QT+event() + 事件过滤器的更多相关文章
- Qt 安装事件过滤器installEventFilter
Qt 安装事件过滤器installEventFilter (2013-01-28 14:29:18) 转载▼ 分类: 工作笔记 Qt的事件模型一个强大的功能是一个QObject对象能够监视发送其他 ...
- Qt event()
event() 今天要说的是 event()函数.记得之前曾经提到过这个函数,说在事件对象创建完毕后,Qt 将这个事件对象传递给 QObject的 event()函数.event()函数并不直接处理事 ...
- 【转】QT事件传递与事件过滤器
[概览] 1.重载特定事件函数. 比如: mousePressEvent(),keyPressEvent(), paintEvent() . 2.重新实现QObject::ev ...
- QT父子窗口事件传递与事件过滤器(讲了一些原理,比较清楚)
处理监控系统的时候遇到问题,在MainWidget中创建多个子Widget的时候,原意是想鼠标点击先让MainWidget截获处理后再分派给子Widget去处理,但调试后发现如果子Widget重新实现 ...
- Qt事件机制浅析(定义,产生,异步事件循环,转发,与信号的区别。感觉QT事件与Delphi的事件一致,而信号则与Windows消息一致)
Qt事件机制 Qt程序是事件驱动的, 程序的每个动作都是由幕后某个事件所触发.. Qt事件的发生和处理成为程序运行的主线,存在于程序整个生命周期. Qt事件的类型很多, 常见的qt的事件如下: 键盘事 ...
- qt事件传递过程和处理
处理监控系统的时候遇到问题,在MainWidget中创建多个子Widget的时候,原意是想鼠标点击先让MainWidget截获处理后再分派给子Widget去处理,但调试后发现如果子Widget重新实现 ...
- event system
事件的概念 简单来说, 就是应用程序感兴趣的应用内部或者外部的活动结果. 在Qt中, 使用QEvent 抽象这些活动. 事件驱动模型 事件驱动模型现在在计算机很多领域都有使用. 例如 BSD sock ...
- QT 实现在QLabel上画图
QT之所以不能再任意控件上绘图是因为QT的事件过滤器把控件的绘图事件给过滤了. 在paintevent()函数中,通常需要设置QPainter对象,创建QPainter对象的同时需要指定绘图设备,即继 ...
- QT学习教程
原地址:http://www.devbean.NET/2012/08/qt-study-road-2-catelog/ 网上看到的不错的教程 本教程以qt5为主,部分地方会涉及qt4.据说非常适合qt ...
随机推荐
- 文本主题抽取:用gensim训练LDA模型
得知李航老师的<统计学习方法>出了第二版,我第一时间就买了.看了这本书的目录,非常高兴,好家伙,居然把主题模型都写了,还有pagerank.一路看到了马尔科夫蒙特卡罗方法和LDA主题模型这 ...
- 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 ...
- 阿里云ECS测试服务器部署
前序:为了提供一个干净的测试环境,更好地验证产品问题,也为了防止被开发人员频繁发布代码而打断测试工作,故测试团队搭建了一台阿里云ECS服务器,以下是具体的部署信息: 1. 安装JDK Java版本:J ...
- 11.Python初窥门径(函数名,可迭代对象,迭代器)
Python(函数名,可迭代对象,迭代器) 一.默认参数的坑 # 比较特殊,正常来说临时空间执行结束后应该删除,但在这里不是. def func(a,l=[]): l.append(a) return ...
- thinkphp5部署到LAMP服务器显示Access denied.
问题:thinkphp5部署到LAMP服务器,首页正常访问,其余页面访问显示Access denied 解决:1.先把文件夹权限改为777 2. 进入服务器,改文件.将php.ini的值改成1
- Centos7.x 安装 pptp
VPN 1:检查是否支持PPTP #返回OK && echo ok ok 2:安装ppp yum install -y ppp 3:导入EPEL源 rpm -ivh http://dl ...
- Codeforces 1152E(欧拉路径)
看样例然后发现只要求一个一笔画即可,用板子. #include <cstdio> #include <cstring> #include <iostream> #i ...
- 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 ...
- NET?.NET Framework?.NET Core?
什么是.NET?什么是.NET Framework?什么是.NET Core? https://www.cnblogs.com/1996V/p/9037603.html 什么是.NET?什么是.NET ...
- 微软官方NET Core 2.0
NET Core 2.0 微软官方发布的.NET Core 2.0相关的博客: Announcing .NET Standard 2.0 Announcing .NET Core 2.0 F# and ...