【问题标题】:VNC: Translate Qt KeyEvent to usable X11/RFB keysymVNC:将 Qt KeyEvent 转换为可用的 X11/RFB 键符
【发布时间】:2012-08-23 23:22:50
【问题描述】:

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

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

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

【问题讨论】:

    标签: windows qt vnc qkeyevent


    【解决方案1】:

    好吧,看来我真的是个盲人; 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-22
      • 1970-01-01
      • 1970-01-01
      • 2017-09-09
      相关资源
      最近更新 更多