【发布时间】:2015-06-26 13:43:43
【问题描述】:
用Qt处理非拉丁键的方法是什么?
例如,对于“W”键按下 QKeyEvent::key() 返回 87,但对于“Ц” - 俄罗斯布局中的相同键 - 它返回 1062。
所以我不能使用像 Qt::Key_W 这样的常量来检查按下了哪个键:如果用户切换布局,它们将不起作用。
谢谢
【问题讨论】:
标签: c++ qt non-latin qkeyevent
用Qt处理非拉丁键的方法是什么?
例如,对于“W”键按下 QKeyEvent::key() 返回 87,但对于“Ц” - 俄罗斯布局中的相同键 - 它返回 1062。
所以我不能使用像 Qt::Key_W 这样的常量来检查按下了哪个键:如果用户切换布局,它们将不起作用。
谢谢
【问题讨论】:
标签: c++ qt non-latin qkeyevent
键的含义取决于当前选择的布局。你观察到的是正确的。如果您在任何其他应用程序中按下该键,您将不会得到 W,而是 Ц (C)。
一个给定的键意味着Qt::Key_W,只有当它在一个产生罗马W的布局中。
如果您打算引用物理键,可以尝试使用QKeyEvent::nativeScanCode() 和/或QKeyEvent::nativeVirtualKey()。当然,这些值取决于平台。
【讨论】:
QKeyEvent::nativeScanCode() 为不同布局中的相同键返回正确(相同)的值。但是,如果它们是特定于平台的,我无法想象如何使用它们......另外,根据 Qt 文档(关于 QKeyEvent::nativeScanCode()):“注意:在 Mac OS/X 上,此功能没有用,因为无法从 Carbon 或 Cocoa 获取扫描码。该函数始终返回 1(或在上述情况下为 0)。所以我很高兴这么多程序处理关键事件的方式是什么?..
W 默认值,并且您可以简单地将更多键分配给相同的功能。在西里尔文键盘上,也有人可以将 Ц 分配给该功能。只需确保您可以为一个功能分配多个键!基本上你必须重新表述你的问题。