我正在使用Qt编写一个可访问性工具,它允许用户只使用键盘操作鼠标。真正讨厌老鼠的人也可以用它。
这个应用程序的独特挑战是扩展了Qt的可能,但幸运的是,Qt是有弹性的。
用户按Caps来激活工具,然后工具会窃取焦点。屏幕上出现一个网格,用户按下键,鼠标每次移动较小的数量。
按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来监听?
发布于 2016-07-25 04:48:41
你不能。即使您知道所有可能的布局和当前布局,您如何在按shift+<key>
的用户和具有Caps并按下<key>
的用户之间做出区别。
这里的问题是,您正在使用shift
作为修饰符,但事实并非如此。因此,您要么继续这样做,要么为用户提供一种更改设置的方法,或者使用标准的修饰符键。
更新:见评论
发布于 2016-07-25 08:49:25
即使您能够知道当前的布局,也不能保证给定的键组合在不同布局之间是可翻译的。有些键可能根本不可用,有些键组合可能是完全不可能的(因为shift键的使用冲突)。
唯一可行的通用解决方案是将键盘快捷键视为可翻译的字符串。这意味着确定应用程序的默认快捷方式集,然后根据要支持的每个区域设置的最常见键盘布局确定它们的提供翻译。
在运行时,您可以创建本地化快捷字符串到函数的映射--从而允许您解释键--事件独立于当前区域设置中分配的实际键组合。
请注意,这样的系统还可以方便地支持用户配置键盘快捷键(因为一般机制几乎相同)。
PS:
正如注释中指出的那样,您应该避免使用QKeyEvent.modiifiers(),因为它是不可靠的。使用QGuiApplication.keyboardModifiers()代替。
https://stackoverflow.com/questions/38565531
复制相似问题