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 ...
随机推荐
- 免打包:简单、灵活、便捷的APP渠道统计方法
相信做过APP运营推广的小伙伴们应该对APP渠道统计并不陌生吧.APP推广运营人员需要根据数据来评估渠道推广的效果,找到最适合自家APP的渠道,有针对性的投放,不断完善推广策略,这样才能更加精准.有效 ...
- jquery jtemplates.js模板渲染引擎的详细用法第一篇
jquery jtemplates.js模板渲染引擎的详细用法第一篇 Author:ching Date:2016-06-29 jTemplates是一个基于JQuery的模板引擎插件,功能强大,有了 ...
- Java中的"\t"
\t相当于表格制表符tab键,一个格内放8的整数倍的字符,根据显示的字符串长度,剩下的显示空格数.比如:字符串长度为1,那么距离下一个串的空格数应该是8-1=7:如果字符串长度为2,那么距离下一个串的 ...
- 查看java版本
我们可以使用 -version 参数来查看当前 Java 的运行版本,命令如下:java -version 以上代码实例输出结果为: java version “1.6.0_13”Java(TM) S ...
- Codeforces Round #566 (Div. 2) B. Plus from Picture
链接: https://codeforces.com/contest/1182/problem/B 题意: You have a given picture with size w×h. Determ ...
- D. Edges in MST 图论
http://codeforces.com/contest/160/problem/D base on 克鲁斯卡尔, 首先每次都是对权值相同的边进行统一处理,假如加入了当前这条边出现了回路,那就能确定 ...
- java程序员应该知道的20个有用的库
https://blog.csdn.net/weixin_43923408/article/details/87885668
- [WPF自定义控件库]了解如何自定义ItemsControl
1. 前言 对WPF来说ContentControl和ItemsControl是最重要的两个控件. 顾名思义,ItemsControl表示可用于呈现一组Item的控件.大部分时候我们并不需要自定义It ...
- B. Game of the Rows
B. Game of the Rows time limit per test 1 second memory limit per test 256 megabytes input standard ...
- undefined is not a function
具体报错 TypeError: c:\Users\Administrator\WebstormProjects\blogtest\views\index.ejs:1 >> 1| <% ...