Qt事件过滤器Event Filter

事件过滤器针对一类或者多种不同类型的对象,定义了重写操作。

简单的说:

1、先对UI对象注册Event Filter

例如:    ui->drawBtn->installEventFilter(this);

2、定义过滤器操作事件

bool BaseWidget::eventFilter(QObject *obj, QEvent *e)
{
switch(e->type())
{
case QEvent::MouseButtonPress:
QToolTip::showText(static_cast<QMouseEvent *>(e)->globalPos(),
static_cast<QWidget *>(obj)->toolTip());
break;
default:
break;
}
return false;
}

在此便实现了点击具体对象时,弹出QToolTip事件。

时间: 2024-10-17 01:21:47

Qt事件过滤器Event Filter的相关文章

QT中使用Event Filter监听按钮事件,Release后按钮不见

Accepted : 42   Submit : 122 Time Limit : 1000 MS   Memory Limit : 65536 KB 题目描述 五虎棋是流传在东北民间的一种游戏,GG小的时候,经常被表哥虐得很惨. 由于各个地区的规则可能不大相同,并且GG的回忆不一定很准,所以,如果规则和你平常玩的的有冲突,请以这里为主. 棋盘是横五条,纵五条直线,形成25个交叉点,双方轮流把棋子放到交叉点上 (由于所需各自和棋子数目不多,才12+13,GG小的时候,用的是象棋的棋盘和棋子,真的

QT事件过滤器(全局过滤,省事)

Qt事件模型一个真正强大的特色是一个QObject 的实例能够管理另一个QObject 实例的事件. 让我们试着设想已经有了一个CustomerInfoDialog的小部件.CustomerInfoDialog 包含一系列QLineEdit. 现在,我们想用空格键来代替Tab,使焦点在这些QLineEdit间切换. 一个解决的方法是子类化QLineEdit,重新实现keyPressEvent(),并在keyPressEvent()里调用focusNextChild().像下面这样: void M

QT 事件过滤器 eventFilter

在监测的代码里执行需要的行为. 这可以用event Filter来达到. 设置一个event filter有两个步骤: 1. 在目标对象上调用installEventFilter(),将监测对象注册到目标对象上.2. 在监测对象的eventFilter()方法里处理目标对象的事件. 在ctor里注册监测对象是一个好地方:CustomerInfoDialog::CustomerInfoDialog(QWidget *parent) :QDialog(parent){    ...    first

Qt笔记——Event

#ifndef MYBUTTON_H #define MYBUTTON_H #include <QPushButton> class MyButton : public QPushButton { Q_OBJECT public: explicit MyButton(QWidget *parent = nullptr); protected: void mousePressEvent(QMouseEvent *e); signals: public slots: }; #endif // MY

QT学习 之 事件与事件过滤器(分为五个层次)

事件 在Qt中,事件是作为对象处理的,所有事件对象继承自抽象类QEvent.此类用来表示程序内部发生或者来自于外部但应用程序应该知道的动作.事件能够能过被 QObject 的子类接受或者处理,但是通常用在与组件有关的应用中.本文主要阐述了在一个典型应用中的事件接收与处理. 事件的传递发送 当一个事件产生时,Qt 通过实例化一个 QEvent 的合适的子类来表示它,然后通过调用 event() 函数发送给 QObject 的实例(或者它的子类). event() 函数本身并不会处理事件,根据事件类

【转】QT事件传递与事件过滤器

1.事件类型 Qt程序是事件驱动的,程序的每个动作都是由幕后某个事件所触发. Qt事件的类型很多,常见的qt的事件如下:            键盘事件: 按键按下和松开.        鼠标事件: 鼠标移动,鼠标按键的按下和松开.        拖放事件: 用鼠标进行拖放.        滚轮事件: 鼠标滚轮滚动.        绘屏事件: 重绘屏幕的某些部分.        定时事件: 定时器到时.        焦点事件: 键盘焦点移动.        进入和离开事件: 鼠标移入widge

QT evenFilter()与installEvenFilter()

1, eventFilter 函数中实现事件过滤器.请注意:该函数在 QObject 类中声明为一个虚函数,因此只能由 QObject 的子类继承使用. 2, installEventFilter函数,它负责在相应部件上安装事件过滤器,其声明为: void QObject::installEventFilter(QObject *filterObj); 其中,filterObj参数表示实现事件过滤器的部件.请注意,如果我们在一个部件安装了事件过滤器,一般在其父控件上实现事件过滤器函数. 我觉得e

installEventFilter可以安装到任何QObject的子类,并不仅仅是UI组件。事件过滤器和安装过滤器的组件必须在同一线程,在它们分属在不同线程时,事件过滤器也是不起作用的

Qt的事件知识点: ①事件对象创建完毕后,Qt 将这个事件对象传递给 QObject 的 event() 函数.event() 函数并不直接处理事件,而是将这些事件对象按照它们不同的类型,分发给不同的事件处理器(event handler). ②event() 函数主要用于事件的分发. ③事件过滤例子: 解释这个例子之前先看:bool eventFilter(QObject*obj,QEvent*event); [virtual]注意: eventFilter 函数返回 bool 值, 即, 如

Qt事务机制顺序问题

1.整体处理流程如下: 在使用select读取触摸屏设备中的数据后(即采样,压力达到一定阈值),处理些采样点后得到一个物理设备坐标点,然后用QCoreApplication的sendEvent活postEvent将其发送出去,于是Event的处理流程就开始了. 首先,QCoreApplication::notify将event直接传递给接受者.重新实现它,可以截取系统所有需要处理的事件. 其notify声明如:bool notify(QObject *, QEvent *) Q_DECL_OVE