本文介绍Qt中捕获键鼠事件的三种方法
class NavigationKeyFilter : public QObject
{
bool eventFilter(QObject *object, QEvent *event)
{
switch(event->type())
{
case QEvent::KeyPress: // 只需要过滤按键事件
{
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event); // 对QEvent进行强制转换,并获得键值
if (keyEvent->key() == Qt::Key_Left || keyEvent->key() == Qt::Key_Right ) // 需要过滤的按键
{
qDebug()<<object->metaObject()->className();
if ( !strcmp( object->metaObject()->className(), "QPushButton" ) ) // 当目标对象的类型是QPushButton,则把消息转发给父类
{
event->ignore(); // 只有ignore后事件才能被交给父类执行
return true; // return true后本级将不会执行,否则会执行后交给父类
}
}
}break;
default:
break;
}
return false;
}
};
然后将其应用到QApplication上
QApplication a(argc, argv);
NavigationKeyFilter filter;
a.installEventFilter(&filter);
MainWindow w;
w.show();