您可以设置添加全局事件侦听器以捕获这些事件.
在窗口构造函数中:
QApplication::instance()->installEventFilter(this);
在窗口的eventFilter方法中:
bool MainWindow::eventFilter(QObject *object,QEvent *event) {
if (event->type() == QEvent::KeyPress) {
QKeyEvent* key_event = static_cast(event);
qDebug() << "key" << key_event->key() << "object" << object;
//...
}
return false;
}
如果已处理事件,则应从此函数返回true.您可以使用对象变量来查找事件源.例如,它可以是一些QPushButton.如果有必要,您可以检查此按钮是否是主窗口的子项(如果您有多个顶窗).
另一种方法是完全禁用按钮的焦点.将按钮的focusPolicy设置为NoFocus.然后他们不会抓住关键事件.
您也可以将QPushButton子类化,并使用空实现重新实现keyPressEvent.