C++ Qt小部件-如何捕获几个键盘键

C++ Qt小部件-如何捕获几个键盘键,c++,qt4,keyboard,C++,Qt4,Keyboard,我知道,使用grabKeyboard()我的小部件也可以在没有聚焦的情况下捕获每个键盘事件,但是如果我只想捕获三个或四个键呢 我尝试使用事件过滤器 但这不起作用(可能是因为我是这样安装的?) 我如何在我的小部件中截取几个键,而将其他小部件(QTextEdits)保留下来?您自己的评论说明了这一切: return TRUE; // eat event 当您为所有键返回true时,将不会进一步处理该事件。对于所有不想处理的密钥,必须返回false 另一种不使用事件过滤器但重新实现按键事件的方法:

我知道,使用grabKeyboard()我的小部件也可以在没有聚焦的情况下捕获每个键盘事件,但是如果我只想捕获三个或四个键呢

我尝试使用事件过滤器

但这不起作用(可能是因为我是这样安装的?)


我如何在我的小部件中截取几个键,而将其他小部件(QTextEdits)保留下来?

您自己的评论说明了这一切:

return TRUE; // eat event
当您为所有键返回
true
时,将不会进一步处理该事件。对于所有不想处理的密钥,必须返回
false

另一种不使用事件过滤器但重新实现按键事件的方法:

void MyWidget::keyPressEvent( QKeyEvent* event ) {
    switch ( event->key() ) {
    case Qt::Key_X:
        //act on 'X'
        break;
    case Qt::Key_Y:
        //act on 'Y'
        break;
    default:
        event->ignore();
        break;
    }
}

你写的第二种方式。。我做到了!但不知何故,“忽略”并没有将键转发给其他小部件,grabKeyboard()一直在“吃掉”所有事件,也就是那些在您的帮助下被忽略的事件。现在,当过滤器告诉我openGL小部件有焦点(即,用户点击了它)时,我“grabKeyboard()”谢谢!
void MyWidget::keyPressEvent( QKeyEvent* event ) {
    switch ( event->key() ) {
    case Qt::Key_X:
        //act on 'X'
        break;
    case Qt::Key_Y:
        //act on 'Y'
        break;
    default:
        event->ignore();
        break;
    }
}