Qt事件过滤器

这篇具有很好参考价值的文章主要介绍了Qt事件过滤器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 介绍

        事件过滤器是一种机制,当某个QObject没有所需要的事件功能时,可将其委托其它QObject,通过eventFilter成员函数来过滤实现功能。

2 主要构成

委托:

ui->QObject1->installEventFilter(QObject2);

eventFilter声明

virtual bool eventFilter(QObject *watched, QEvent *event) override;

        在Qt creator中,可以使用如下步骤简化实现:

        a)右键widget

Qt事件过滤器,c++qt,qt,开发语言 

        b)选择insert  Virtual。。。:

Qt事件过滤器,c++qt,qt,开发语言

        c)选择eventFilter,并勾选如下,稍后将定义粘贴到对应的.cpp文件中即可

Qt事件过滤器,c++qt,qt,开发语言

Qt事件过滤器,c++qt,qt,开发语言

 3 示例代码:使用事件过滤器对label实现单双击事件响应

       widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QEvent>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //将label委托给widget
    ui->labelSC->setText("单击我");
    ui->labelSC->installEventFilter(this);
    ui->labelDC->installEventFilter(this);
}

Widget::~Widget()
{
    delete ui;
}

bool Widget::eventFilter(QObject *watched, QEvent *event)
{
    if(watched == ui->labelSC)
    {
        if(event->type() == QEvent::Enter)
            ui->labelSC->setStyleSheet("background-color:rgb(170,255,255)");
        else if(event->type() == QEvent::Leave)
        {
            ui->labelSC->setText("单击我");
            ui->labelSC->setStyleSheet("");
        }
        else if(event->type() == QEvent::MouseButtonPress)
            ui->labelSC->setText("MouseButtonPress");
        else if(event->type() == QEvent::MouseButtonRelease)
            ui->labelSC->setText("MouseButtonRelease");
    }
    if(watched == ui->labelDC)
    {
        if(event->type() == QEvent::Enter)
            ui->labelDC->setStyleSheet("background-color:rgb(170,0,255)");
        else if(event->type() == QEvent::Leave)
        {
            ui->labelDC->setText("双击我");
            ui->labelDC->setStyleSheet("");
        }
        else if(event->type() == QEvent::MouseButtonDblClick)
            ui->labelDC->setText("MouseButtonDblClick");
        else if(event->type() == QEvent::MouseButtonRelease)
            ui->labelDC->setText("MouseButtonRelease");
    }
    return QWidget::eventFilter(watched, event);
}

        widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;

    // QObject interface
public:
    virtual bool eventFilter(QObject *watched, QEvent *event) override;
};


#endif // WIDGET_H

 文章来源地址https://www.toymoban.com/news/detail-638820.html

 

到了这里,关于Qt事件过滤器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt 事件过滤器使用QPainter绘制温度

    Qt的 eventFilter 是一个事件过滤器,可以用来捕获和处理Qt对象的事件。事件过滤器可以被安装到一个对象上,以便在该对象上拦截和处理包含特定类型和内容的事件。下面是 eventFilter 的简单使用介绍: 创建一个类,并继承自 QObject 。这个类将作为事件过滤器的实现。 在该类

    2024年02月12日
    浏览(37)
  • Qt之事件过滤器讲解并且实现快捷键切换鼠标焦点

    现在有一个类似于下方图的ui,用户需要在输入前一行内容后,需要摁下指定案件能够跳转到下一行继续进行输入。 一种更为直接的解决方案是子类化 QLineEdit 并且重新实现鼠标事件 keyPressEvent() ,然后调用 focusNextChild() 。 首先需要创建一个子类MyLineEdit继承于QLineEdit类。然后重

    2024年02月12日
    浏览(57)
  • 【VS Code 与 Qt6】运用事件过滤器批量操作子级组件

    如果某个派生自 QObject 的类重写 eventFilter 方法,那它就成了事件过滤器(Event Filter)。该方法的声明如下: watched 参数是监听事件的对象,即事件的接收者;event 参数当然就是待处理的事件了。事件过滤器(也可以翻译为“筛选器”)可在接收者之前拦截事件,处理完毕后还

    2024年02月08日
    浏览(51)
  • [后端开发] 过滤器相关注解

    使用Springboot框架开发后端,在鉴权的时候使用到了过滤器。但是在测试的过程发现,跨域的过滤器在过滤链中出现了两次,导致前端访问后端接口时报错:The \\\'Access-Control-Allow-Origin\\\' headers contains multiple values,but only one allowed.错误 在浏览器端比较正常访问接口和报错接口的hea

    2024年04月16日
    浏览(46)
  • JAVA开发(通过网关gateway过滤器进行返回结果加密)

    在对C的网站或者APP后端接口中,参数的传输往往需要加密传输。这时我们 可以通过springcloud的网关过滤器进行统一的控制。 网关过滤器的执行顺序: 请求进入网关会碰到三类过滤器:当前路由过滤器、DefaultFilter、GlobalFilter。 请求路由后,会将当前路由过滤器和DefaultFilter、

    2023年04月17日
    浏览(55)
  • web3j的基础用法-6合约的监听器事件Event和过滤器EthFilter,以及NullPointed,调用失败导致的bug解决

    本篇以Uniswap为例(https://uniswap.org/) 合约地址 :0x1f9840a85d5af5bf1d1762f925bdaddc4201f984 (Uni) 监听合约Tranfer事件 调用代码 核心代码实现在这里 之前实验全量区块,导致请求多次失败,是由于个人RPC节点的请求和数据有限,为了测试出结果,从13763721L block到当前,结果毫秒级返

    2024年02月11日
    浏览(50)
  • 开发笔记 | JAVA过滤器Filter实现全局接口入参去除前后空格

    目录 思考过程 遇到的问题 过滤器Filter使用步骤 全局去除入参前后空格代码实现 处理过程中自己造成的一些问题 需求背景: 前端所有的条件查询去除前后空格,如搜 【\\\"   测试    \\\"】后端将其转为【测试】。之前都是前端统一处理的,但是这次要后端处理,那么就得考虑

    2024年02月12日
    浏览(41)
  • 033-安全开发-JavaEE应用&SQL预编译&Filter过滤器&Listener监听器&访问控制

    1、JavaEE-JDBC-SQL预编译 2、JavaEE-HTTP-Filter过滤器 3、JavaEE-对象域-Listen监听器 演示案例: ➢JavaEE-预编译-SQL ➢JavaEE-过滤器-Filter ➢JavaEE-监听器-Listen 提前编译好执行逻辑,你注入的语句不会改变原有逻辑! 预编译写法: safesql 是一个预编译的 SQL 查询语句,其中 ? 是一个占位符

    2024年02月22日
    浏览(51)
  • jQuery选择器(二)(基本过滤器,内容过滤器,可见过滤器)

    写在前面 jQuery是一个快速、简洁的 JavaScript 框架,是继Prototype之后又一个优秀的 JavaScript 代码库。jQuery的设计宗旨是“WriteLess,DoMore”,即倡导写更少的代码,做 更多的事情。jQuery封装了 JavaScript 常用的功能代码,提供一种简便的 JavaScript 设计模式,优化HTML文档操作、事件

    2024年02月02日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包