当前位置: 首页 > article >正文

qt EventFilter用途详解

一、概述

EventFilter是QObject类的一个事件过滤器,当使用installEventFilter方法为某个对象安装事件过滤器时,该对象的eventFilter函数就会被调用。通过重写eventFilter方法,开发者可以在事件处理过程中进行拦截和处理,实现对事件的精确控制。

二、相关方法和概念

  • bool installEventFilter(00bject *filter0bj)

安装事件过滤器。

  • bool removeEventFilter(00bject *object)

移除事件过滤器

  • bool eventFilter(00bject *watched, QEvent *event)override

事件过滤器函数,重载 00bject::eventFilter 函数进行自定义事件处理。

QEvent 类:常用事件类型

  • 0Event::MouseButtonPress:鼠标按下事件。
  • 0Event::MouseButtonRelease:鼠标释放事件。
  • QEvent::MouseMove:标移动事件。
  • QEvent::KeyPress:键盘按下事件。
  • QEvent::KeyRelease:键盘释放事件。
  • QEvent::Resize:窗口大小改变事件。
  • QEvent::Close:窗囗关闭事件。
  • QEvent::FocusIn:焦点获得事件。
  • QEvent::Focus0ut:焦点失去事件。

三、使用方法

1、子类化QObject并重写eventFilter方法

  • 创建一个新的类,继承自QObject,并重写eventFilter方法。
  • 在这个方法中,检查事件的类型并决定是否进行特殊处理。

2、安装事件过滤器

  • 将事件过滤器对象安装到希望监视的对象上,通过调用目标对象的installEventFilter方法来完成。

3、事件处理

  • 在eventFilter方法中,通过检查event参数的类型来确定是否处理特定的事件。
  • 如果eventFilter方法返回true,则表示事件已经被处理,并且系统不会将事件传递给其他过滤器或目标对象。
  • 如果eventFilter方法返回false,则系统将继续将事件传递给下一个过滤器或目标对象。
#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QEvent>
#include <QDebug>
 
class MyEventFilter : public QObject
{
    Q_OBJECT
 
protected:
    bool eventFilter(QObject *obj, QEvent *event) override
    {
        if (event->type() == QEvent::MouseButtonPress) {
            qDebug() << "Mouse button pressed on" << obj;
            return true; // 阻止目标对象进一步处理
        }
        return QObject::eventFilter(obj, event);
    }
};
 
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
 
    QWidget window;
    QPushButton *button = new QPushButton("Press me", &window);
 
    MyEventFilter *filter = new MyEventFilter;
    button->installEventFilter(filter);
 
    window.show();
    return app.exec();
}

觉得有帮助的话,打赏一下呗。。

           


http://www.kler.cn/news/367816.html

相关文章:

  • 鸿蒙原生应用开发及部署:首选华为云,开启HarmonyOS NEXT App新纪元
  • 前沿技术与未来发展第一节:C++与机器学习
  • Oracle CONNECT BY、PRIOR和START WITH关键字详解
  • C#实现简单的文件夹对比程序
  • HLS协议之nginx-hls-多码率测试环境搭建
  • 知识见闻 - 磁力片原理
  • 第 24 章 - Elasticsearch 索引生命周期管理
  • k8s知识点总结
  • HttpClient4.3 关于https 中SSL证书请求问题
  • 对角线遍历矩阵模板
  • Git使用问题汇总附带解决方法(持续更新)
  • Pr 视频效果:波形变形
  • 可编辑60页PPT | 大数据基础知识培训课件
  • 禅道源码部署
  • 全能大模型GPT-4o体验和接入教程
  • vim的使用方法
  • 基于Java(SSM框架)+MySQL开发的小型英语学习网站
  • 高级sql技巧
  • 【利用Seaborn进行高级数据可视化】创建美观且信息丰富的图表!
  • Axios get请求数组参数移除默认的[]
  • Python 判断键是否存在字典中(新手入门、实战案例)
  • 【计网】从零开始认识IP协议 --- 理解网段划分,NAT策略,私有IP和公网IP,认识公网
  • HuggingFace应用——自然语言处理(1):什么是NLP?什么是Transformer?
  • 第23周Java主流框架入门-SpringMVC 3.拦截器
  • C++游戏开发中的多线程处理是否真的能够显著提高游戏性能?如果多个线程同时访问同一资源,会发生什么?如何避免数据竞争?|多线程|游戏开发|性能优化
  • 学习pytorch