0

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

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

可能已经有一个库或代码片段可以完成这个吗?还是我应该尝试编写自己的(不完整的)翻译程序?如果是这样,解决此问题的最佳方法是什么,还有其他与 X11 相关的警告我应该注意吗?

4

1 回答 1

0

好吧,看来我实际上是个盲人;krdc 的代码中有一个引用,就在 e->nativeVirtualKey() 语句的正下方,引用了另一个项目的,他们遇到了与我完全相同的问题:

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

我没有测试他们的解决方案,但它看起来很可靠。正如我现在才发现的那样,我自己已经编写了一个小例程,它应该适用于大多数拉丁键盘(但如果 Qt 团队更改任何 Qt::Key 值可能会中断),如果有人对此感兴趣的话:关联

于 2012-08-29T15:28:42.570 回答