如何用KeySym或KeyCode构造Qt::Key?

如何用KeySym或KeyCode构造Qt::Key?,qt,keyboard,keyboard-shortcuts,x11,Qt,Keyboard,Keyboard Shortcuts,X11,我有一个低级键盘记录器,它接收扫描代码,没有QKeyEvent,因为QApplication没有焦点。可以使用系统特定的库调用将扫描代码转换为密钥符号 扫描代码对应于Qt的QKeyEvent->nativeScanCode(),键符号对应于QKeyEvent->nativeVirtualKey(),但Qt的Qt::key值似乎是独立映射的。我想获取一个给定的Qt::Key并转换为sym Key或扫描代码,或者用sym Key或扫描代码构造一个Qt::Key,这样我就可以将捕获的Key与预先确定的

我有一个低级键盘记录器,它接收扫描代码,没有QKeyEvent,因为QApplication没有焦点。可以使用系统特定的库调用将扫描代码转换为密钥符号

扫描代码对应于Qt的QKeyEvent->nativeScanCode(),键符号对应于QKeyEvent->nativeVirtualKey(),但Qt的Qt::key值似乎是独立映射的。我想获取一个给定的Qt::Key并转换为sym Key或扫描代码,或者用sym Key或扫描代码构造一个Qt::Key,这样我就可以将捕获的Key与预先确定的Qt::Key进行比较


我见过其他项目通过实现大型、不完整的查找表来实现这一点。当然,如果Qt正在收集扫描代码并用它们构造QtKey,那么它一定有一些内部映射?我想要一些避免重复的方法。是否有任何可访问的Qt API来从密钥符号或扫描代码构造Qt::key,或者有任何可以复制而不依赖外部项目的非公共API Qt代码?

不幸的是,在Qt密钥和本机密钥代码之间进行转换似乎并不容易

您可以使用Qt用于X11的相同映射。我使用QxtGlobalShortcut库

原始表格来自。源文件包含一些用于转换本机密钥代码以在Qt中使用的函数。问题是
QXcb*
类不是公共类,从标题的外观来看,可能会在较小的Qt版本之间中断(因此不建议直接使用)