Qt事件分发器、事件过滤器

简介: Qt事件分发器、事件过滤器

一、事件分发器

事件分发器:用于事件的分发,可以进行事件拦截的操作。事件分发器返回布尔类型:bool event(QEvent ev),如果返回值为true,代表用户自己处理该事件,否者交给基类实现事件。使用步骤:重写event事件;

    //事件过滤器
    bool eventFilter(QObject *obj,QEvent *e);
//事件分发器
bool MyLabel::event(QEvent *e){
    //如果鼠标按下,在event事件中做处理
    if(e->type()==QEvent::MouseButtonPress){
 
        QMouseEvent *ev=static_cast<QMouseEvent *>(e);
        QString str=QString("event鼠标按下x=%1 y=%2 globalX=%3 globalY=%4").arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
        qDebug()<<str;
        //事件已处理,不向下分发
        return true;
    }
    //向下分发
    return QLabel::event(e);
}

二、事件过滤器

事件过滤器:可以在程序分发到event事件之前再做一次高级拦截。事件分发器返回布尔类型:bool eventfilter(QObjectobj,QEvent ev),如果返回值为true,代表用户自己处理该事件,否者交给基类实现事件。使用两个步骤:1.给控件安装事件过滤器;2.重写eventfilter事件。

//给label 安装事件过滤器
    ui->label->installEventFilter(this);
bool Widget::eventFilter(QObject *obj,QEvent *e){
    if(obj==ui->label){
    //如果鼠标按下,在event事件中做处理
        if(e->type()==QEvent::MouseButtonPress){
 
            QMouseEvent *ev=static_cast<QMouseEvent *>(e);
            QString str=QString("event鼠标按下x=%1 y=%2 globalX=%3 globalY=%4").arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
            qDebug()<<str;
            //事件已处理,不向下分发
            return true;
        }
    }
    return QWidget::eventFilter(obj,e);
}
相关文章
|
存储 算法 C++
【C++ 包装器类 std::tuple】全面入门指南:深入理解并掌握C++ 元组 std::tuple 的实用技巧与应用(三)
【C++ 包装器类 std::tuple】全面入门指南:深入理解并掌握C++ 元组 std::tuple 的实用技巧与应用
725 0
|
JSON 前端开发 JavaScript
优雅!Spring Boot 3.3 实现职责链模式,轻松应对电商订单流程
本文介绍如何使用 Spring Boot 3.3 实现职责链模式,优化电商订单处理流程。通过将订单处理的各个环节(如库存校验、优惠券核验、支付处理等)封装为独立的处理器,并通过职责链将这些处理器串联起来,实现了代码的解耦和灵活扩展。具体实现包括订单请求类 `OrderRequest`、抽象处理器类 `OrderHandler`、具体处理器实现(如 `OrderValidationHandler`、`VerifyCouponHandler` 等)、以及初始化职责链的配置类 `OrderChainConfig`。
|
消息中间件 搜索推荐 算法
数据仓库常见规范
数据仓库常见规范
数据仓库常见规范
|
11月前
|
编解码 自然语言处理
通义万相开源14B数字人Wan2.2-S2V!影视级音频驱动视频生成,助力专业内容创作
今天,通义万相的视频生成模型又开源了!本次开源Wan2.2-S2V-14B,是一款音频驱动的视频生成模型,可生成影视级质感的高质量视频。
2281 29
|
数据采集 Python
天天基金数据的Python爬虫
天天基金数据的Python爬虫
1365 3
|
资源调度 JavaScript
Pinia的数据持久化
Pinia的数据持久化
|
并行计算 大数据 Java
高效数据处理:使用Python实现并行计算的技巧
传统的数据处理方式在面对大数据时可能效率不高,本文探讨如何利用Python中的并行计算技术来提升数据处理速度和效率,重点介绍了多线程和多进程的应用,以及如何选择合适的场景使用这些技术。

热门文章

最新文章