QT事件过滤器(eventFilter)的使用
程序说明
通过QT事件过滤器,过滤鼠标和键盘按键事件。使鼠标单击无效,键盘A键无效。
UI界面
widget.h 文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QDebug>
#include <QMouseEvent>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
// 申明事件过滤器
bool eventFilter(QObject *watched, QEvent *event);
private slots:
void on_pushButton_clicked();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
widget.c 文件
#include "widget.h"
#include "ui_widget.h"
//功能:事件过滤
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//对两件控件安装事件过滤器
ui->pushButton->installEventFilter(this);
ui->lineEdit->installEventFilter(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
qDebug()<<"*********************";
}
//重写事件过滤器函数:watched对象上产生了event事件
bool Widget::eventFilter(QObject *watched, QEvent *event)
{
if(watched == ui->pushButton)
{
QMouseEvent *p = static_cast<QMouseEvent *>(event);
// 通过event判断是否左键单击
if(p->button() == Qt::LeftButton)
{
qDebug()<<"#################";
return true; //返回true,表示这个事件被处理了,这个事件就不会触发单击信号
}
}
if(watched == ui->lineEdit)
{
QKeyEvent *p = static_cast<QKeyEvent *>(event);
// 通过event判断是否A键按下,然后过滤
if(p->key()==Qt::Key_A )
{
qDebug()<<"^^^^^^^^^^";
return true;
}
}
return QWidget::eventFilter(watched,event);
}