Qt每天一个小技巧之QObject::eventFilter(过滤器)事件

说好的计划,就要实现,今年我要把吹过的牛皮,设定的计划,统统给圆了。

今天我们来看过滤器函数,为QObject的一个虚函数。今天使用的我们主要是3个函数:

virtual bool eventFilter(QObject *watched, QEvent *event) //过滤器函数

void installEventFilter(QObject *filterObj) //安装过滤器函数

void removeEventFilter(QObject *obj)  //清除过滤器函数

      当我们经常想要对控件交互时候,去操作自己的处理方式。比如鼠标事件(mousePressEvent),键盘事件(keyPressEvent)。

     下面我们简单看看如何处理。

从上面可以看出来,类型对象都是继承QObject的对象,这样就会调用虚继承的函数,这也是为啥希望大家把c++ 类继承一定要搞清楚的原因了。

如图,我左边放了一个graphicsView  右边放了一个textEdit。

 对应代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QMouseEvent>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->graphicsView->installEventFilter(this); //我们添加
    ui->textEdit->installEventFilter(this);

}

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

bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{

    QMouseEvent *mouse = static_cast<QMouseEvent*>(event);
    if(watched == ui->graphicsView)
    {
        if(mouse->button() == Qt::LeftButton)
        {
           qDebug() << "输出graphicsView MouseButtonPress";
           return  true;
        }

    }

    if(watched == ui->textEdit)
    {
        if(mouse->button() == Qt::LeftButton)
        {
           qDebug() << "输出 textEdit MouseButtonPress";
           return  true;
        }

    }
    return QWidget::eventFilter(watched,event);
}

输出结果:

输出graphicsView MouseButtonPress
输出graphicsView MouseButtonPress
输出 textEdit MouseButtonPress
输出 textEdit MouseButtonPress
输出 textEdit MouseButtonPress
输出 textEdit MouseButtonPress
输出 textEdit MouseButtonPress
输出 textEdit MouseButtonPress

这个过滤器使用的时候还是有点小问题的,就是点击graphcsView,有时候不触发。伤心。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值