如何将 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 转换为键盘键名?的主要内容,如果未能解决你的问题,请参考以下文章