【QT随笔】事件过滤器(installEventFilter 和 eventFilter 的组合)之生命周期管理详解

#AI的出现,是否能替代IT从业者?#

【QT随笔】事件过滤器(installEventFilter 和 eventFilter 的组合)之生命周期管理详解

上一章节中提到事件过滤器(Event Filter),用于处理特定事件。其中第二小节中提到了事件过滤器生命周期管理。本文将详细解析事件过滤器生命周期管理这一部分的内容。

(关注不迷路哈!!!)


前言

生命周期三个阶段总览

    1. 初始化阶段
      在这里插入图片描述
    1. 运行阶段

在这里插入图片描述

    1. 清理阶段

在这里插入图片描述


一、初始化阶段

  • 创建过滤器对象:过滤器必须是QObject的子类,建议设置父对象实现自动内存管理
  • 安装到目标控件:通过installEventFilter()方法注册,过滤器被添加到目标控件的过滤器链表头部
  • 建立事件连接:建立从Qt事件系统到过滤器的连接通道,事件将首先经过过滤器处理

1. 创建过滤器对象

在这里插入图片描述

// 方式1:直接创建(需手动管理内存)
MyEventFilter* filter = new MyEventFilter();
// 风险:需要手动delete,容易导致内存泄漏

// 方式2:设置父对象(推荐,自动内存管理)
MyEventFilter* filter = new MyEventFilter(targetWidget);
// targetWidget删除时自动删除filter

// 方式3:使用智能指针
std::unique_ptr<MyEventFilter> filter = 
    std::make_unique<MyEventFilter>();

关键要点

  • 过滤器必须继承自 QObject
  • 建议设置父对象实现自动内存管理
  • 可以在堆栈或堆上创建

2. 安装到目标控件

在这里插入图片描述

// 安装事件过滤器
targetWidget->installEventFilter(filter);

// 安装多个过滤器(按安装顺序逆序执行)
targetWidget->installEventFilter(filter1); // 最后执行
targetWidget->installEventFilter(filter2); // 其次执行
targetWidget->installEventFilter(filter3); // 最先执行

执行顺序原理
执行顺序原理

3. 建立事件连接

在这里插入图片描述

内部机制

  • Qt在 QObject内部维护一个过滤器链表
  • 每个事件首先遍历此链表
  • 任一过滤器返回 true则终止事件传递
// Qt内部伪代码实现
bool QObject::event(QEvent *e) {
   
   
    // 先调用事件过滤器
    if (d->filterList) {
   
   
        for (auto filter 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QT 小鲜肉

感谢您的鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值