如何禁止在Qt中使用带有按钮的键盘上的箭头键
Posted
技术标签:
【中文标题】如何禁止在Qt中使用带有按钮的键盘上的箭头键【英文标题】:How to forbid the use of arrow keys on the keyboard with pushbuttons in Qt 【发布时间】:2013-01-09 13:27:36 【问题描述】:我在 Qt 中做一个简单的项目来旋转一个立方体,我遇到了键盘和按钮上的箭头问题。
我有两个按钮,当我点击第一个按钮时,立方体向右旋转,第二个按钮用于向左旋转。
我在键盘上也有两个方向键,向上和向下,它们的功能和按钮一样。当我按下向上箭头时,立方体向右旋转等等。
问题是当我启动应用程序时,箭头而不是控制旋转,选择按钮。所以我需要知道在哪里可以更改此选项,即关闭按钮中箭头键的导航操作。
Projet是继承QMainWindow制作的。
【问题讨论】:
试试这个:pushButton->setFocusPolicy(Qt::NoFocus)
【参考方案1】:
默认情况下,QPushButton
(与QWidget
的许多其他子类一样)将具有处理键盘焦点的默认方式。在按钮的情况下,箭头键将键盘焦点从一个按钮移动到下一个按钮,以方便在窗口中导航并在没有鼠标的情况下与小部件进行交互。
正如 hank 在评论中建议的那样,您可以通过调用 setFocusPolicy(Qt::NoFocus)
来强制 QPushButton
不接受键盘焦点,但这仅适用于按钮是您的 @987654325 中唯一按钮的特定情况@ 可能会窃取焦点。如果您有其他小部件(例如QLineEdit
),当焦点结束时,箭头键仍然无法正常工作,因为QLineEdit
将抓住这些键,并且什么也不做。
解决问题的更灵活的方法是在 QMainWindow
的每个子小部件上安装一个事件过滤器,并让该事件过滤器将箭头键事件转发到旋转立方体的函数(同时让其他一切都通过以允许适当的小部件处理任何其他事件)。
另一个解决方案是让您的立方体小部件使用QWidget::grabKeyboard()
抓取所有键盘事件。这将确保每个键盘事件都被发送到该小部件,无论键盘焦点在哪里。当您想让其他小部件接收键盘事件时,您需要调用QWidget::releaseKeyboard()
来取消它。
【讨论】:
以上是关于如何禁止在Qt中使用带有按钮的键盘上的箭头键的主要内容,如果未能解决你的问题,请参考以下文章
如何在 FLTK 中对两个不同的小部件同时使用键盘箭头和鼠标单击?