如何将 Qt::Key 转换为键盘键名?

Posted

技术标签:

【中文标题】如何将 Qt::Key 转换为键盘键名?【英文标题】:How to convert Qt::Key to Keyboard key-name? 【发布时间】:2015-03-27 10:22:30 【问题描述】:

我有来自 keyPressEvent func 的 QtKeyEvent* 事件。

我想从此事件中获取键盘键名。 示例:我按“ALT + SHIFT + 1”,我想从 event->modifiers 获取两个修饰符,从 event->key()(或 event->nativeVirtualKey())获取“1”。

我对 ALT 和 SHIFT 没有问题,但我无法从事件中获取键名(字符串)“1”。

我尝试使用 QKeySequence(key).toString() 它适用于“1”、“2”... 但是当我尝试按“F1”...时,它看起来是“F1”->“p”,“F2”->“q”...

如果我按“SHIFT + 1”如何获得 QString keyname =“1”,如果我按“F1”如何获得 keyname =“F1”?

【问题讨论】:

key.text() 能完成这项工作吗? 不,没有。 key.text() 显示“!”如果 SHIFT 处于活动状态 【参考方案1】:

来自Qt Doc:

QString QKeyEvent::text() 常量

返回此键生成的 Unicode 文本。返回的文本 在修饰键(例如 Shift)的情况下可以是空字符串, Control、Alt 和 Meta 被按下或释放。在这种情况下 key() 将包含一个有效值。

然后你需要手动处理一些情况。

【讨论】:

【参考方案2】:

QKeySequence(event->key()).toString() 打印出 F1-F12 就好了。

Shift+number 被 Qt 识别为 !, $, % 等等由于操作系统中的键盘布局设置。在不同的布局上,您将获得不同的键。恐怕 Qt 没有 API 来读取较低级别的密钥。

查看 WebOS 如何针对不同的布局执行key mappings。

【讨论】:

以上是关于如何将 Qt::Key 转换为键盘键名?的主要内容,如果未能解决你的问题,请参考以下文章

在 Spark SQL 中,将 JSON 键名转换为值

如何将键(QtCore.Qt.Key_1)分配给python中的按钮。数字键盘

PHP json转换 无键名数据格式转换为有键名格式

QT事件循环

PHP 根据配置转换数组中的键名 方便给前端的时候改键名

AS3 将鼠标事件转换为键盘事件