【发布时间】: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