qt -- 事件过滤器eventFilter(QObject* obj, QEvent* e)

1、事件过滤器用于拦截传递到目标对象的事件,这样可以实现监视目标对象事件的作用

2、实现事件过滤器的步骤:

1、Qt 调用
void QObject::installEventFilter (QObject* filterObj)
filterObj 对象设置安装 ( 或注册 ) 为事件过滤器, filterObj 也称为过滤器对象。事件
过滤器通常在构造函数中进行注册。
2、在上一步注册的 filterObj 对象,通过调用
bool QObject:: eventFilter (QObject* obj, QEvent* e);
来接收拦截到的事件。也就是说拦截到的事件在 filterObj 对象中的 eventFilter 函数中
处理。 eventFilter 的第一个参数 obj 指向的是事件本应传递到的目标对象。
3、使用 QObject::removeEventFilter(QObject *obj) 函数可以删除事件过滤器。

3、 事件过滤器处理事件的规则

①、过滤器对象的 eventFilter()函数可以接受或拒绝拦截到的事件,若该函数返回 false, 则表示事件需要作进一步处理,此时事件会被发送到目标对象本身进行处理(注意: 这里并未向父对象进行传递),若 evetnFilter()返回 true,则表示停止处理该事件,此 时目标对象和后面安装的事件过滤器就无法获得该事件。

②、若同一对象安装了多个事件过滤器,则最后安装的过滤器首先被激活。

 4、理解事件过滤器

观察者模式:其原理为,设有一目标对象 W,它有多个观察该对象的对象 G1 G2 ,G3, 当 W发生变化时,W的观察者会依情形改变自身。应用于 Qt 事件过滤器,则是,首先使 用 W的成员函数 installEventFilter 函数把 G1 G2 G3 设置为 W 的观察者,所有本应传递 给 W的事件 E,则先传递给观察者 G1 G2 G3 ,然后观察者调用其成员函数 eventFilter 对传递进来的事件进行处理,若 eventFilter 返回 true 表示事件处理完毕,返回 false 则返 回给被观察者 W 进行处理。见下图。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值