我正在使用Qt编写一个辅助工具,它允许用户仅使用键盘操作鼠标。真正讨厌老鼠的人也可以使用它。
这个应用程序的独特挑战正在扩展Qt的可能性,但幸运的是Qt具有弹性。
用户按下Caps Lock激活工具,之后工具会窃取焦点。屏幕上出现一个网格,用户按下每次移动鼠标较小的按键。
按住鼠标左键0,网格消失。添加Alt双击。
按住Shift 0应该单击鼠标右键,按Ctrl Shift 0应该在中间单击。
我面临的问题是,在我的键盘上,Shift+0
会产生QKeyEvent(QKeyEvent.KeyPress, Qt.NoModifier, Qt.Key_ParenRight)
(所以,)
),这根本不能保证。如果我的计算机使用日语IME,我将获得QKeyEvent(QKeyEvent.KeyPress, Qt.ShiftModifier, Qt.Key_0)
。
帮助,如何获取有关用户当前键盘布局的信息,以便我可以选择正确的Qt.KeyEvent来监听?
答案 0 :(得分:0)
你做不到。即使您知道所有可能的布局和当前布局,您如何区分用户按下shift+<key>
或打开大写锁定的用户并按<key>
。
这里的问题是你使用shift
作为修饰符而不是。
因此,要么您继续以这种方式提供用户更改其设置的方式,要么使用标准修改键回退。
更新:查看评论
答案 1 :(得分:0)
即使您可以知道当前布局,也无法保证给定的键组合可以在不同布局之间进行转换。某些键可能根本不可用,并且某些键组合可能根本不可能(因为使用了shift键的冲突)。
唯一可行的通用解决方案是将键盘快捷键视为可翻译字符串。这意味着决定应用程序的一组默认快捷方式,然后基于您要支持的每个区域设置的最常用键盘布局来确定它们的providing translatations。
有了这些,在运行时,您可以创建本地化快捷方式字符串到函数的映射 - 从而允许您独立于当前区域设置中指定的实际组合键来解释键事件。
请注意,像这样的系统也可以轻松支持用户配置键盘快捷键(因为一般机制几乎相同)。
PS:
正如评论中所指出的,你应该避免使用QKeyEvent.modiifiers(),因为它不可靠。请改用QGuiApplication.keyboardModifiers()。