【问题标题】:Keyboard layout switching in Qt, not Qt for embedded LinuxQt 中的键盘布局切换,而不是用于嵌入式 Linux 的 Qt
【发布时间】:2014-10-05 18:53:06
【问题描述】:

我正在寻找一种在我的 Qt 应用程序中更改键盘布局的方法。该应用程序将在不支持键盘布局文件的 Linux 内核上运行,因此 Qt 必须完成与键盘输入映射相关的所有工作。

对于嵌入式 Linux 的 Qt,我在这里找到了一个好看的解决方案: Qt Embedded for Linux. Keyboard layout switching

但不幸的是,QKbdDriverFactory 类不适用于任何其他 Qt 版本,根据此处的文档:http://qt-project.org/doc/qt-4.8/qkbddriverfactory.html 无论如何我都尝试包含它(令人惊讶的是,类就在那里),但是每当我调用 create 函数时,编译器都会抛出“未定义的引用”错误。

我必须手动编写大型 QMap 对象吗?请告诉我有一种不那么乏味的方法。我不想相信 qmap 文件不能在 Qt 之外用于嵌入式 Linux,因为如果 kmap2qmap 转换器在大多数情况下都没用,为什么它几乎可以在任何 SDK 中使用?

亚历克斯

编辑:附加信息: 我正在使用 Qt 4.7.4(32 位)和 QtCreator 2.4.1。
我在虚拟机上使用 Ubuntu 12.04、64 位。
目标系统是具有专用最小 Linux 内核的硬件,因此尝试使用 Qt Embedded 将非常困难。
没有 Xcb 服务器,没有帧缓冲区插件(edit2:但我们确实使用帧缓冲区),我不知道 DE 或 eglfs 是什么意思。

【问题讨论】:

  • 这个问题缺少重要信息。你用的是DE吗?你在用X吗?你在用eglfs吗?你在使用帧缓冲插件吗?您使用的是哪个版本的 Qt?暗示您使用的是 Qt 4.8。那你为什么不使用嵌入式呢?
  • 好的,我添加了我能找到的信息。请注意,我是来自“Qt Embedded”线程的同一个人,所以让我们尽量不要变得多余。我只是认为创建一个新线程会更好,因为这是一个新问题。
  • DE 表示桌面环境。所以,它是嵌入式设备,好的。我仍然不明白您是如何设法在没有 X11 或帧缓冲区或 EGL 的系统上运行 Desktop Qt 版本的。 Linux 图形模式可以是 X11、Framebuffer 或 EGL。似乎它不是传统的 Linux 系统。它是Linux吗?你自己一个人。由于没有 kbd 模块,您必须从头开始实现所有内容(请参阅 LFS 项目)或要求您的内核供应商定制系统以满足您的需求
  • 更多关于 Qt 中的 EGL/X/Framebuffer 支持的信息:qt-project.org/forums/viewthread/24299 但它适用于 Qt5
  • 也许您使用的是 Qt Embedded Android?

标签: linux qt keyboard keyboard-layout qmap


【解决方案1】:

看来您应该实现自己的键盘支持层。

  1. 您没有dumpkeys 程序,因此您无法在设备上生成键盘映射文件。使用桌面版。
  2. 台式电脑生成的键码可能与您的设备生成的键码不同,因此您应该调整它们。
  3. 调整键盘映射文件后,您可以编写代码来读取这些文件。
  4. 拥有 KEY_CODE=>UTF8_CHARACTER 的映射,您可以根据当前使用的键映射截获键事件并将其转换为输入符号。

【讨论】:

  • 谢谢,我会记住这一点,但现在我们决定尝试切换到 Qt Embedded。
猜你喜欢
  • 2011-02-09
  • 2010-11-19
  • 2013-02-18
  • 1970-01-01
  • 2021-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-11
相关资源
最近更新 更多