我正在学习在Qt(C ++)中处理keypress和keyrelease事件。我有一个类键盘,我想要处理所有这些事件。它继承了QObject。它不需要处理任何鼠标事件。我试图找出当我的应用程序对该类打开时如何指导所有键盘输入。
我尝试将其作为小部件添加到我的MainWindow类的布局中并隐藏它(小部件,而不是布局)。目前,这没有回应。
我也在我的MainWindow课程中试过这个:
void MainWindow::keyPressEvent(QKeyEvent *event)
{
keys->keyPressEvent(event);
//Keys is a Keyboard object with this public method:
//void keyPressEvent(QKeyEvent *event);
}
但那也没有用。在我的Keyboard :: Keyboard()构造函数中,我有:
this->setFocusPolicy(Qt::StrongFocus);
我不确定是否还需要做其他事情以确保键盘输入到达那里。
如果有人知道如何为我的Qt应用程序将所有键盘事件发送到此类,那么非常非常有帮助!
谢谢,
约翰
答案 0 :(得分:7)
对于任何想知道的人,我找到了问题的答案。
在处理键盘事件的类的构造函数中,我添加了以下行:
QWidget::grabKeyboard();
现在该应用程序处于活动状态时所有键盘输入都直接进入该窗口小部件。 您可以查看参考资料以获取更多信息: QWidget::grabKeyboard
注意:在致电QWidget::releaseKeyboard()
之前,其他任何内容(即没有其他小部件)都会获得键盘输入。