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