其存在的意义:

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. 数据可视化系列--svg入门基础(一)

    一.前言 1.SVG(Scalable Vector Graphics)可伸缩矢量图形 特点: (1)使用xml格式来定义图形: (2)用来定义web上的使用的矢量图: (3)改变图像尺寸,图片质量不 ...

  2. 关于define

    <?php define('local','localhost');//echo constant('local');exit(); define('username','root'); def ...

  3. 2010辽宁省赛G(佩尔方程)

    #include <iostream> #include <stdio.h> #include <string.h> #include <algorithm& ...

  4. centos7及以上安装git服务

    检查git是否安装或者是版本 whereis git等命令来检查是否已经安装了git版本的 git --version检测到我的环境自带的git版本 已安装但不是想要的版本需要卸载 yum remov ...

  5. IT兄弟连 Java语法教程 Java开发环境 JVM、JRE、JDK

    要想开发Java程序,就需要知道什么是JVM.JRE以及JDK.JVM是运行Java程序的核心,JRE是支持Java程序运行的环境,而JDK是Java开发的核心,下面我们分别具体介绍它们以及它们之间的 ...

  6. ios 适配问题

    两张图解决

  7. EXP-00000: Message 0 not found; No message file for product=RDBMS, facility=EXP问题的解决方案

    EXP-00000: Message 0 not found; No message file for product=RDBMS, facility=EXP 最近在服务器上准备做一个批处理,定时备份 ...

  8. 安卓下点击a标签不跳转;点击a标签在手机真机上会调出手机键盘的解决办法

    安卓下点击a标签不跳转的解决办法,是不用href做跳转的链接,改为用JS控制跳转 <a href="javascript:;" ontouchstart="wind ...

  9. .NET 基础 一步步 一幕幕[Winform应用程序]

    时隔半载,重回博客园,一切从头再来,今天只是开始,原谅我这一生放荡不羁爱自由. 进入今天得主题曲:Winform应用程序(简介) 1.      winform应用程序是一种智能客户端技术,我们可以使 ...

  10. Codeforces 1163D(kmp、dp)

    要点 \(dp[i][j][k]\)表示主串已经到第\(i\)位时,\(s\)匹配在\(j\)位.\(t\)匹配在\(k\)位的最大得分 本来就要试填一层循环,如果转移也写在循环里的化复杂度承受不了, ...