其存在的意义:

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() + 事件过滤器的更多相关文章

  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. 谷歌同声翻译Translatotron原理

    背景介绍 作为中国人,学好英语这件事从小学开始就让人苦恼,近些年随着AI的快速发展,语言差异是否会缩小甚至被消灭成了热门话题.在5月15日,谷歌AI在博客平台发出一篇文章,正式介绍了一款能保留原声的& ...

  2. time元素 pubdate属性

    time元素和pubdate属性 https://blog.csdn.net/ziy10231207/article/details/51883397

  3. (function (window, document, undefined) {})(window, document)什么意思?

    1.IIFE(即时调用的函数表达式),它采取以下表达式: (function (window, document, undefined) { // })(window, document); Java ...

  4. Hyperledger Fabric 替换couchDB

    fabric中默认数据存储的方式是levelDB,一个key/value存储的单机数据库.除此之外还提供了另外一种存储方式:couchDB.同样也是一个K/V 数据库,对fabric而言,相比于前者, ...

  5. 为产品接入微信支付解决方案(公司&个人)

    微信支付个人及公司的区别 H5支付:主要实现的效果是在非微信内网页中点击支付,拉起微信APP内的微信支付进行付款. APP支付:主要实现的效果是在APP内部点击支付,拉起微信APP内的微信支付进行付款 ...

  6. SP14932 LCA - Lowest Common Ancestor

    Description: 一棵树是一个简单无向图,图中任意两个节点仅被一条边连接,所有连通无环无向图都是一棵树.\(-Wikipedia\) 最近公共祖先(\(LCA\))是--(此处省去对\(LCA ...

  7. Java中对象拷贝的两种方式

    引用的拷贝 //引用拷贝 private static void copyReferenceObject(){ Person p = new Person(23, "zhang") ...

  8. 关于JS点击button之灵活替换改变内容方法

    <p id="demo">JavaScript 能改变 HTML 元素的内容.</p> <script>function myFunction( ...

  9. 批量插入,update

    #####setting 1create table t as select * from all_objects where 1 =2; ###.模拟逐行提交的情况,注意观察执行时间DECLAREB ...

  10. nio aio netty区别

    传统io就是bio     同步阻塞         但可以采用伪同步 nio  jdk1.7以前     同步非阻塞io     1.7以后     同步异步非阻塞                  ...