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 ...
 
随机推荐
- 谷歌同声翻译Translatotron原理
			
背景介绍 作为中国人,学好英语这件事从小学开始就让人苦恼,近些年随着AI的快速发展,语言差异是否会缩小甚至被消灭成了热门话题.在5月15日,谷歌AI在博客平台发出一篇文章,正式介绍了一款能保留原声的& ...
 - time元素   pubdate属性
			
time元素和pubdate属性 https://blog.csdn.net/ziy10231207/article/details/51883397
 - (function (window, document, undefined) {})(window, document)什么意思?
			
1.IIFE(即时调用的函数表达式),它采取以下表达式: (function (window, document, undefined) { // })(window, document); Java ...
 - Hyperledger Fabric 替换couchDB
			
fabric中默认数据存储的方式是levelDB,一个key/value存储的单机数据库.除此之外还提供了另外一种存储方式:couchDB.同样也是一个K/V 数据库,对fabric而言,相比于前者, ...
 - 为产品接入微信支付解决方案(公司&个人)
			
微信支付个人及公司的区别 H5支付:主要实现的效果是在非微信内网页中点击支付,拉起微信APP内的微信支付进行付款. APP支付:主要实现的效果是在APP内部点击支付,拉起微信APP内的微信支付进行付款 ...
 - SP14932 LCA - Lowest Common Ancestor
			
Description: 一棵树是一个简单无向图,图中任意两个节点仅被一条边连接,所有连通无环无向图都是一棵树.\(-Wikipedia\) 最近公共祖先(\(LCA\))是--(此处省去对\(LCA ...
 - Java中对象拷贝的两种方式
			
引用的拷贝 //引用拷贝 private static void copyReferenceObject(){ Person p = new Person(23, "zhang") ...
 - 关于JS点击button之灵活替换改变内容方法
			
<p id="demo">JavaScript 能改变 HTML 元素的内容.</p> <script>function myFunction( ...
 - 批量插入,update
			
#####setting 1create table t as select * from all_objects where 1 =2; ###.模拟逐行提交的情况,注意观察执行时间DECLAREB ...
 - nio   aio   netty区别
			
传统io就是bio 同步阻塞 但可以采用伪同步 nio jdk1.7以前 同步非阻塞io 1.7以后 同步异步非阻塞 ...