我正在开发一个主要在 MacOS 上开发的 Qt 应用程序,但随后也在 Linux 上构建和测试。
我们在主窗口类中定义一个 keyPressEvent() 方法来响应某些键盘事件。其中,我们响应 Qt::Key_Left、Qt::Key_Right 和 Qt::Key_Space。这在 MacOS 上效果很好。然而,在 Linux 上,我们永远不会收到这些事件。
进行一些谷歌搜索(并通过我们的应用程序在 Linux 上的行为进行确认),似乎其原因是 Qt 使用这些键在应用程序的 GUI 中对按钮小部件进行键盘导航。如果我在 Linux 上按箭头键,我会循环浏览所有活动按钮小部件,依次选择每个按钮小部件。如果我单击空格键,则按下当前选定的按钮。
到目前为止,我通过谷歌搜索所能找到的只是关于如何对特定按钮进行子类化或应用过滤器的建议,以避免通过让按钮忽略事件并将其传递来避免这种行为。但我不想对我放入 GUI 中的每个按钮小部件都执行此操作。那太蹩脚了。
有没有办法全局禁用此行为并允许我的应用程序代码实际获取所有箭头键和空格键事件?