【问题标题】:Can I detect a QWERTY / AZERTY keyboard with Qt?我可以用 Qt 检测 QWERTY / AZERTY 键盘吗?
【发布时间】:2018-03-28 02:11:52
【问题描述】:

我想根据键盘类型设置一些快捷键,使其始终是一行键(Q-W-EA-Z-E)。这需要根据我知道的键盘类型对快捷键进行硬编码。

是否可以使用 Qt 检索此信息?

【问题讨论】:

  • 有点题外话:我习惯于在不同的键盘布局之间切换,如果根据布局的不同,快捷键不同,我会觉得很困惑。此外,使用不同布局的人也很难谈论该程序。 “我使用了 XY 快捷方式” - “那是什么?在我的版本中没有这样的快捷方式”
  • @tobi303 有时您可能希望强制执行某些组合键的布局。例如,在 QWERTY 键盘上的游戏中,键 W、S、A 和 D 用作上、下、左、右。对于 AZERTY 键盘,您希望保留布局并重新映射到 Z、S、Q 和 D。
  • @BenjaminT 我会称之为“捷径”,尽管我完全明白你的意思。我只是认为通常用 ctrl+y 替换例如 ctrl+z 只是为了将键放在键盘上的同一个位置并不好,我不知道 OPs 案例是否是一个例外
  • @tobi303 我同意你的观点,这真的取决于你的应用程序的使用。我正在为一个用户根本不会玩系统或键盘的应用程序工作,所以在我的情况下强制这样做是有意义的。

标签: c++ qt keyboard


【解决方案1】:

你可以通过http://doc.qt.io/qt-5/qinputmethod.html#locale-prop获得键盘QLocale

有点像

QApplication a(argc, argv);
qDebug() << a.inputMethod()->locale();

或者

qDebug() << QLocale::system();

给我 QLocale(French, Latin, France) 和 QLocale(French, Default, France)

【讨论】:

  • 那么我应该将语言环境与使用 QWERTY 的 language+country 进行比较?我想它会起作用,但如果您想在许多国家/地区部署,则很难维护
  • 编辑:使用 AZERTY 的国家列表基本上仅限于法国和很少的自定义布局,所以我可以检查这个并将其余的视为 QWERTY。谢谢!
  • 我从来没有做过这样的事情,我只是给了一些提示
  • 我能够像这样检测到我的 azerty 键盘bool isAzerty = qApp-&gt;inputMethod()-&gt;locale().language() == QLocale::French;
【解决方案2】:

你可以这样做:

#include <QLocale>

int main() {

  QLocale locale;

  if (locale.language() == QLocale::Language::French) {
    // Do something
  } else {
    // Do something else
  }

  return 0;
}

当然,它适用于所有语言。

【讨论】:

    猜你喜欢
    • 2020-07-29
    • 2018-01-19
    • 2013-10-26
    • 2015-02-08
    • 2012-05-28
    • 1970-01-01
    • 2011-04-17
    • 2020-07-14
    • 2010-10-11
    相关资源
    最近更新 更多