如何使用Qt中的按钮禁止在键盘上使用箭头键

时间:2013-01-09 13:27:37

标签: qt

我在Qt做一个简单的项目来旋转一个立方体,我的键盘和按钮上的箭头有问题。

我有两个按钮,当我点击第一个按钮时,立方体旋转到右边,第二个按钮用于将它旋转到左边。

键盘上还有两个箭头键,上下两个,其功能与按钮相同。当我按向上箭头时,立方体向右旋转,依此类推。

问题是当我启动应用程序时,箭头而不是控制旋转,选择按钮。所以我需要知道在哪里可以更改这个选项,即关闭按钮中箭头键的导航动作。

Projet是通过继承QMainWindow制作的。

1 个答案:

答案 0 :(得分:3)

默认情况下,QPushButton(与QWidget的许多其他子类一样)将具有处理键盘焦点的默认方式。在按钮的情况下,箭头键将键盘焦点从一个按钮移动到下一个按钮,以便于在窗口中导航并在不使用鼠标的情况下与小部件交互。

正如hank在评论中建议的那样,您可以通过调用QPushButton强制setFocusPolicy(Qt::NoFocus)不接受键盘焦点,但这只会在按钮是唯一的情况下才能使用在你的QMainWindow中可以窃取焦点。如果你有其他小部件(例如QLineEdit),当焦点结束时,箭头键仍然无法正常工作,因为QLineEdit将抓住这些键,什么也不做。

解决问题的更灵活的方法是在每个QMainWindow的子窗口小部件上安装事件过滤器,并让事件过滤器将箭头键事件转发到旋转您的多维数据集的函数(同时允许其他所有内容通过,以允许任何其他事件由适当的小部件处理。)

另一个解决方案是让您的多维数据集窗口小部件使用QWidget::grabKeyboard()获取所有键盘事件。这将确保每个键盘事件都被发送到该窗口小部件,无论键盘焦点位于何处。当您想让其他小部件接收键盘事件时,您需要致电QWidget::releaseKeyboard()以取消它。

相关问题