获取 QKeyEvent 的关键位置(多平台)
Get key position of QKeyEvent (multiplatform)
为了制作适用于所有键盘布局的基于位置的键盘快捷键,我需要确定一个物理键盘键,而不是在其之上的键盘布局。理想情况下,我想检索 QKeyEvent 的扫描码,因为它与键盘布局无关。
例如,如果我想将 Shift+Q
映射到 volume-down 并将 Shift+W
映射到 volume-up(美式键盘布局中两个相邻的键)根据 this scancode set,我可以将它们映射到 Shift+0x10
和 Shift+0x11
。这样,它也适用于切换 Q 和 A 的法语键盘布局。它甚至可以用于 DVORAK 键盘布局或其他奇特的键盘布局,因为键盘布局将被忽略。
现在的问题是:如何检索 QKeyEvent 的扫描码,或任何其他说明物理键位置的参数,忽略键盘布局,这将适用于所有平台?我希望它适用于 Windows、Linux 和 OSX。
QKeyEvent::nativeScanCode() 完成工作,但它不适用于 OSX :\
您已经拥有最跨平台的方式来做到这一点。除了 Qt 还没有为 OS X 实现它,至少从 Qt 5.7 开始。
随意修补您的 Qt 副本以包含 HID 事件点击以获取扫描码,例如参见.
为了制作适用于所有键盘布局的基于位置的键盘快捷键,我需要确定一个物理键盘键,而不是在其之上的键盘布局。理想情况下,我想检索 QKeyEvent 的扫描码,因为它与键盘布局无关。
例如,如果我想将 Shift+Q
映射到 volume-down 并将 Shift+W
映射到 volume-up(美式键盘布局中两个相邻的键)根据 this scancode set,我可以将它们映射到 Shift+0x10
和 Shift+0x11
。这样,它也适用于切换 Q 和 A 的法语键盘布局。它甚至可以用于 DVORAK 键盘布局或其他奇特的键盘布局,因为键盘布局将被忽略。
现在的问题是:如何检索 QKeyEvent 的扫描码,或任何其他说明物理键位置的参数,忽略键盘布局,这将适用于所有平台?我希望它适用于 Windows、Linux 和 OSX。
QKeyEvent::nativeScanCode() 完成工作,但它不适用于 OSX :\
您已经拥有最跨平台的方式来做到这一点。除了 Qt 还没有为 OS X 实现它,至少从 Qt 5.7 开始。
随意修补您的 Qt 副本以包含 HID 事件点击以获取扫描码,例如参见