如果要全局检测按键(对于应用程序快捷方式等很有用),首先需要QObject通过首次重载为应用程序创建一个eventFilter QObject::eventFilter:
bool cKeyPressEater::eventFilter(QObject *Object, QEvent *Event)
{
if (Event->type() == QEvent::KeyPress)
{
QKeyEvent *KeyEvent = (QKeyEvent*)Event;
switch(KeyEvent->key())
{
case Qt::Key_F1:
//do something
break;
default:
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
...然后安装该对象作为eventFilter您的应用程序:
QObject *KeyPressEater = GetYourEventFilterObject();
QCoreApplication::instance()->installEventFilter(KeyPressEater);
Run Code Online (Sandbox Code Playgroud)
否则,正如@Mat所说,只是过载QWidget::keyPressEvent.你需要setFocusPolicy并且实际上有焦点才能获得按键.