事件过滤器(eventFliter):
Qt提供了事件过滤器来在一个部件中监控其他多个部件的事件。事件过滤器与其他部件不同,他不是一个类,只是由两个函数( installEventFilter() 和 eventFilter() )组成的一种操作,用来完成一个部件对其他部件的事件的监视。
installEventFilter() 和 eventFilter()这两个函数都是QObject类中的函数。
使用事件过滤器可以很容易的处理多个部件的事件。
举个实际例子:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 为子部件安装事件过滤器(其实就是允许父窗口监视自己)
ui->editInput->installEventFilter(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
bool MainWindow::eventFilter(QObject *target, QEvent *event)
{
//监视editInput子部件的事件
if (target == ui->editInput)
{
//监视editInput子部件的键盘按下事件
if (event->type() == QEvent::KeyPress)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
//重写大小键盘的enter按钮,Key_Enter是小键盘的确认键,Key_Return是大键盘的回车键
if (keyEvent->key() == Qt::Key_Enter || keyEvent->key() == Qt::Key_Return)
{
on_btnSend_clicked();
return true;
}
}
}
return QMainWindow::eventFilter(target, event);
}