我正在用 Qt 编写一个如下所示的程序:
主窗口是我的类Window : QWidget
,它有一个QGridLayout
包含四个其他小部件(Input_Menu : QWidget
和Output_Menu : QWidget
,然后是两个Canvas : QWidget
)
我想在用户按键时触发某些事件。问题是,Window
有时会失去焦点(它会说Input_Menu
,或者可能是Input_Menu
...中的一个按钮)
我尝试了以下解决方案,但它们似乎不令人满意(而且很脏):
Window
每当它失去它时,给它焦点。- 告诉每个可能有焦点的小部件在收到键盘事件时触发
Window
's功能(或它的克隆)。KeyPressEvent
理想情况下,我希望如果一个小部件接收到一个事件(比如键盘事件)并且不知道如何处理它,它应该自动调用其父级的事件处理程序。我希望这是 Qt 的默认功能,但它看起来不像。另一方面,我对整个焦点问题感到非常困惑,我真的不明白发生了什么。std::cout << "key pressed" << std::endl;
有人可以向我解释一下吗:我的Window::KeyPressEvent
函数中包含了 a 。当我第一次运行我的程序时,似乎焦点在顶部的 QComboBox 上Input_Menu
:如果我按下向上/向下键,我会在该框中导航,并且在我的控制台中没有显示“按下键”。如果我击中大多数字母,则不会发生任何事情。但是,如果我按左/右键,我的控制台中确实会出现“按下键”!?
非常感谢您的见解。