VNC:将Qt KeyEvent转换为可用的X11 / RFB密钥

时间:2012-08-29 11:00:19

标签: windows qt vnc qkeyevent

背景:我目前正在创建一个嵌入在QWidget中的简单VNC查看器,以便在Windows上使用。为此,我编译了KRDC的Qt-only VNC版本(KDE的远程桌面查看器)以及Windows上的依赖关系libvncclient。然而,现在出现的问题在于krdc通过vnc发送密钥事件的方式:它只是发送QKeyEvent :: nativeVirtualKey()的值,它在X11上方便地已经是有效的RFB密钥。但是在Windows上,情况并非如此。

现在,为了解决这个问题,我认为最好的(也是最终也是可移植的)方法是将Qt的QKeyEvent :: key()和:: modifier()数据转换回有效的X11 / RFB密钥。这似乎有些复杂,但考虑到我需要根据修改器状态(XK_a vs XK_A,我到目前为止仅考虑移位)选择不同的键符号。研究如何X11 - > Qt的翻译是在Qt的源代码中完成的,并没有真正帮助。

可能已经有一个库或代码片段可以实现这个目的吗?或者我应该尝试编写自己的(不完整的)翻译例程?如果是这样,那么最好的方法是什么呢?还有其他与X11相关的警告我应该注意吗?

1 个答案:

答案 0 :(得分:0)

嗯,好像我真的是瞎了;在krdc的代码中有一个引用,就在e-> nativeVirtualKey()语句的下面,引用了另一个项目的class,在那里他们遇到了和我完全相同的问题:

// hmm, either Win32-platform or too old Qt so we have to handle and
// translate Qt-key-codes to X-keycodes

我没有测试他们的解决方案,但看起来很稳固。正如我现在才发现的那样,我自己已经编写了一个小程序,对大多数拉丁语键盘都可以正常工作(但如果Qt团队改变任何Qt :: Key值,可能会破坏),如果有人对它感兴趣: link