【问题标题】:QKeyEvent handling non-latin layoutsQKeyEvent 处理非拉丁布局
【发布时间】:2015-06-26 13:43:43
【问题描述】:

用Qt处理非拉丁键的方法是什么?

例如,对于“W”键按下 QKeyEvent::key() 返回 87,但对于“Ц” - 俄罗斯布局中的相同键 - 它返回 1062。

所以我不能使用像 Qt::Key_W 这样的常量来检查按下了哪个键:如果用户切换布局,它们将不起作用。

谢谢

【问题讨论】:

    标签: c++ qt non-latin qkeyevent


    【解决方案1】:

    键的含义取决于当前选择的布局。你观察到的是正确的。如果您在任何其他应用程序中按下该键,您将不会得到 W,而是 Ц (C)。

    一个给定的键意味着Qt::Key_W,只有当它在一个产生罗马W的布局中。

    如果您打算引用物理键,可以尝试使用QKeyEvent::nativeScanCode() 和/或QKeyEvent::nativeVirtualKey()。当然,这些值取决于平台。

    【讨论】:

    • 感谢您的回答!事实证明,只有QKeyEvent::nativeScanCode() 为不同布局中的相同键返回正确(相同)的值。但是,如果它们是特定于平台的,我无法想象如何使用它们......另外,根据 Qt 文档(关于 QKeyEvent::nativeScanCode()):“注意:在 Mac OS/X 上,此功能没有用,因为无法从 Carbon 或 Cocoa 获取扫描码。该函数始终返回 1(或在上述情况下为 0)。所以我很高兴这么多程序处理关键事件的方式是什么?..
    • @mvlabat 一旦您让用户对按键进行编程功能分配,就不再需要拘泥于任何预设的扫描码。其他人都是这样处理它的。您的应用程序可以具有W 默认值,并且您可以简单地将更多键分配给相同的功能。在西里尔文键盘上,也有人可以将 Ц 分配给该功能。只需确保您可以为一个功能分配多个键!基本上你必须重新表述你的问题。
    猜你喜欢
    • 1970-01-01
    • 2021-12-28
    • 2012-06-28
    • 2015-06-26
    • 2021-07-21
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多