Qt 事件 过滤器(原理解析加案例)

        就是对某个控件的事件进行过滤,用来改变它原有的行为,比如QLineEdit这个控件我输入一个字母A,控件中就会出现一个字母A,如果我想改变QLineEdit这个行为,我想输入输入A,显示B。正常情况下,我们可以自定义一个类,这个类继承QLineEdit,然后重写keyPressEvent方法,但是如果项目中很多控件都需要这种处理方式,我们可以使用事件过滤器统一改变。

上效果图

实现方式:
1 在目标对象上调用installEventFilter(),注册监视对象。
2.在监视对象的eventFilter()函数中处理目标对象的事件。

上代码:

头文件

#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT
public:
    explicit Dialog(QWidget *parent = nullptr);
    ~Dialog();
    virtual bool eventFilter(QObject *, QEvent *);

private:
    Ui::Dialog *ui;
};
#endif // DIALOG_H

 源文件

#include "dialog.h"
#include "ui_dialog.h"
#include <QDebug>
#include <QKeyEvent>
#include <QString>
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    ui->textEdit->installEventFilter(this);
}

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

bool Dialog::eventFilter(QObject *obj, QEvent *event)
{
    if(obj == ui->textEdit)
    {
        if(event->type() == QEvent::KeyPress)
        {
            qDebug()<<"sss";
            QKeyEvent *keyEvent  =(QKeyEvent *)(event);
            if(keyEvent->key() == Qt::Key_A)
            {
                ui->lineEdit->clear();
                ui->lineEdit_2->clear();
                ui->textEdit->clear();
                ui->lineEdit->setText(("输入的是A"));
                ui->lineEdit_2->setText(("显示的是B"));
                ui->textEdit->setText("B");
            }
        }
    }  
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值