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