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

  • 本文关键字:键盘 按钮 何禁止 禁止 Qt qt
  • 更新时间 :
  • 英文 :


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

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

我在键盘上也有两个箭头键,向上和向下,它们的功能与按钮相同。当我按向上箭头时,立方体向右旋转,以此类推。

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

项目是通过继承QMainWindow创建的。

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

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

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

另一个解决方案是让您的多维数据集小部件使用QWidget::grabKeyboard()抓取所有键盘事件。这将确保每个键盘事件都被发送到那个小部件,无论键盘焦点在哪里。当您想让其他小部件接收键盘事件时,您需要调用QWidget::releaseKeyboard()来取消抓取。

最新更新