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

时间:2018-02-02 23:32:49

标签: qt keyboard keyboard-shortcuts x11

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

扫描码对应于Qt的QKeyEvent-> nativeScanCode(),关键符号对应于QKeyEvent-> nativeVirtualKey(),但Qt的Qt :: Key值似乎是独立映射的。我想要一个给定的Qt :: Key并转换为sym键或扫描代码,或者从sym键或扫描代码构造一个Qt :: Key,以便我可以将捕获的键与预先确定的Qt的::密钥' S

我通过实施大型不完整的查找表ref1 ref2看到了其他项目。当然,如果Qt收集扫描码并构建QtKey,它必须有一些内部映射?我想要一些方法来避免重复。是否有任何可访问的Qt API来构建来自关键syms或扫描代码的Qt :: Keys,或者可以复制而不是依赖外部项目的任何非公共API Qt代码?

1 个答案:

答案 0 :(得分:2)

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

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

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