我在 Qt 中做一个简单的项目来旋转一个立方体,我遇到了键盘和按钮上的箭头问题。
我有两个按钮,当我单击第一个按钮时,立方体向右旋转,第二个按钮用于向左旋转。
我的键盘上还有两个方向键,向上和向下,它们的功能与按钮相同。当我按下向上箭头时,立方体向右旋转,依此类推。
问题是当我启动应用程序时,箭头而不是控制旋转,选择按钮。所以我需要知道在哪里可以更改此选项,即关闭按钮中箭头键的导航操作。
Projet 是通过继承 QMainWindow 制作的。
我在 Qt 中做一个简单的项目来旋转一个立方体,我遇到了键盘和按钮上的箭头问题。
我有两个按钮,当我单击第一个按钮时,立方体向右旋转,第二个按钮用于向左旋转。
我的键盘上还有两个方向键,向上和向下,它们的功能与按钮相同。当我按下向上箭头时,立方体向右旋转,依此类推。
问题是当我启动应用程序时,箭头而不是控制旋转,选择按钮。所以我需要知道在哪里可以更改此选项,即关闭按钮中箭头键的导航操作。
Projet 是通过继承 QMainWindow 制作的。
默认情况下,QPushButton
(与 的许多其他子类一样QWidget
)将具有处理键盘焦点的默认方式。在按钮的情况下,箭头键将键盘焦点从一个按钮移动到下一个按钮,以方便在窗口中导航并在没有鼠标的情况下与小部件进行交互。
正如 hank 在评论中所建议的那样,您可以QPushButton
通过调用它来强制它不接受键盘焦点setFocusPolicy(Qt::NoFocus)
,但这仅在按钮是您QMainWindow
中唯一可以窃取焦点的特定情况下才有效。如果您在其中有其他小部件(例如 a QLineEdit
),当焦点结束时,箭头键仍然无法正常工作,因为它们QLineEdit
会抓住这些键,并且什么也不做。
解决您的问题的更灵活的方法是在您QMainWindow
的每个子小部件上安装一个事件过滤器,并让该事件过滤器将箭头键事件转发给旋转立方体的功能(同时让其他所有内容通过以允许由适当的小部件处理的任何其他事件)。
另一种解决方案是让您的立方体小部件使用QWidget::grabKeyboard()
. 这将确保每个键盘事件都被发送到该小部件,无论键盘焦点在哪里。当您想让其他小部件接收键盘事件时,您需要调用QWidget::releaseKeyboard()
取消抓取它。