Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何确定Qt.KeyEvent Shift+;0将导致什么结果?_Qt_Localization_Internationalization_Pyqt_Qt5 - Fatal编程技术网

我如何确定Qt.KeyEvent Shift+;0将导致什么结果?

我如何确定Qt.KeyEvent Shift+;0将导致什么结果?,qt,localization,internationalization,pyqt,qt5,Qt,Localization,Internationalization,Pyqt,Qt5,我正在使用Qt编写一个辅助工具,它允许用户仅使用键盘操作鼠标。真正讨厌老鼠的人也可以使用它 该应用程序的独特挑战是扩展Qt的功能,但幸运的是Qt是有弹性的 用户按下Caps Lock以激活该工具,然后该工具窃取焦点。屏幕上会出现一个网格,用户按下键,每次移动鼠标的量都会变小 按0鼠标左键单击,栅格将消失。添加Alt双击 按Shift 0键应单击鼠标右键,按Ctrl Shift 0键应单击鼠标中键 我面临的问题是,在我的键盘上,Shift+0将导致QKeyEvent(QKeyEvent.Key

我正在使用Qt编写一个辅助工具,它允许用户仅使用键盘操作鼠标。真正讨厌老鼠的人也可以使用它

该应用程序的独特挑战是扩展Qt的功能,但幸运的是Qt是有弹性的

用户按下Caps Lock以激活该工具,然后该工具窃取焦点。屏幕上会出现一个网格,用户按下键,每次移动鼠标的量都会变小

按0鼠标左键单击,栅格将消失。添加Alt双击

按Shift 0键应单击鼠标右键,按Ctrl Shift 0键应单击鼠标中键

我面临的问题是,在我的键盘上,
Shift+0
将导致
QKeyEvent(QKeyEvent.KeyPress,Qt.NoModifier,Qt.Key\u ParenRight)
(因此,a
,这一点都不能保证。如果我的电脑是日文输入法,我会得到一个
QKeyEvent(QKeyEvent.KeyPress,Qt.ShiftModifier,Qt.Key\u 0)


帮助,如何获取有关用户当前键盘布局的所需信息,以便选择要侦听的正确Qt.KeyEvent?

您不能。即使您知道所有可能的布局和当前布局,您会如何区分用户按下shift+或用户打开大写锁定并按下
之间的区别

这里的问题是,您使用的是
shift
作为修饰符,而不是。 因此,要么继续这样做,为用户提供更改其设置的方法,要么退回到使用标准修改键


更新:请参阅评论,您不能。即使您知道所有可能的布局和当前布局,您会如何区分用户按下shift+或用户打开大写锁定并按下
之间的区别

这里的问题是,您使用的是
shift
作为修饰符,而不是。 因此,要么继续这样做,为用户提供更改其设置的方法,要么退回到使用标准修改键


更新:请参阅注释

即使您知道当前布局,也不能保证给定的键组合在不同布局之间是可翻译的。有些键可能根本不可用,而有些组合键可能根本不可能(因为shift键的用法冲突)

唯一可行的通用解决方案是将键盘快捷键视为可翻译字符串。这意味着为您的应用程序确定一组默认的快捷键,然后根据您希望支持的每个区域设置的最常见键盘布局确定其中的一组

有了它,您就可以在运行时创建本地化快捷键字符串到函数的映射,从而允许您独立于在当前区域设置中分配的实际键组合来解释键事件

请注意,这样的系统还可以很容易地支持用户配置键盘快捷键(因为一般机制几乎相同)

附言:


正如评论中指出的,您应该避免使用,因为它不可靠。请改用。

即使您知道当前布局,也不能保证给定的键组合可以在不同布局之间转换。有些键可能根本不可用,而有些组合键可能根本不可能(因为shift键的用法冲突)

唯一可行的通用解决方案是将键盘快捷键视为可翻译字符串。这意味着为您的应用程序确定一组默认的快捷键,然后根据您希望支持的每个区域设置的最常见键盘布局确定其中的一组

有了它,您就可以在运行时创建本地化快捷键字符串到函数的映射,从而允许您独立于在当前区域设置中分配的实际键组合来解释键事件

请注意,这样的系统还可以很容易地支持用户配置键盘快捷键(因为一般机制几乎相同)

附言:


正如评论中指出的,您应该避免使用,因为它不可靠。请改用。

Microsoft Windows已经定义了用于控制鼠标的键盘键。被否决是因为:1。Qt已经通过发送不同的密钥代码解决了“caps lock”问题,正如我上面所示。2.Shift是根据Qt的一个修饰符。请参阅Qt.ShiftModifier。3.如果您知道所有可能的布局以及当前布局(及其信息),您可以找到“0”,找到0的Shift键,并使用该QKey查找QKeyEvents。4.与此无关。但是,您如何区分按
和按
shift+0
,后者被解释为
.2.日语中有一个
shift
修饰符,因为您没有与
shift+0
关联的其他字符,而在计算机上的其他布局中,您没有任何修饰符,因为
shift+0
被翻译为
.3.您可以,但它不会像预期的那样工作,例如,在法语azerty布局中,0键可以键入“0”或“a”。您得到的“a”不带修改器,或者如果您同时具有shift和caps lock,那么如果您仅具有shift或caps lock,则会得到0。因此,当您得到一个带有0的键事件时,用户可能正在按shift键,或者不按,您需要进行设置ck caps lock status.4.鼠标键与此有很大关系。它的功能是相同的:用键盘控制光标。我的评论只是建议使用与某些用户可能使用的相同的键盘绑定。此外,您应该使用
QGuiApplication::keyboardModifiers()
而不是
QKeyEvent::modifiers()
如Qt文档所述。可能移位修饰符设置正确。M