创建事件过滤器的两个步骤:
1、通过对目标对象调用installEventFilter()来注册监视对象。
2、在监视对象的eventFilter()函数中处理目标对象的事件。
事件过滤器一旦被注册,放发给被监视对象的被监视的事件在它们到达目的地之前就会先发给eventFilter()函数。如果在事件处理函数中没有被处理,它将把事件发送给指定目标
事件过滤器的实现:
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if(/*根据obj判断对象*/)
if(/*根据event->type() 判断事件类型*/)
{
//时间处理逻辑
}
//调用父类中的同名函数
return QWidget::eventFilter(obj,event);
}
例:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
....
firstNameEdit->installEventFilter(this);
lastNameEdit->installEventFilter(this);
CityEdit->installEventFilter(this);
phoneNumberEdit->installEventFilter(this);
}
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if(obj == firstNameEdit || obj == lastNameEdit || obj == CityEdit || obj == phoneNumberEdit)
if(event->type() == QEvent::KeyPress)
{
QKeyEvent * pEvent = dynamic_cast<QKeyEvent *>(event);
if(pEvent->key() == Qt::Key_Space)
{
focusNextChind();
return true;
}
}
return QWidget::eventFilter(obj,event);
}