Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Qt中切换键盘布局,而不是在嵌入式Linux中切换Qt_Linux_Qt_Keyboard_Keyboard Layout_Qmap - Fatal编程技术网

在Qt中切换键盘布局,而不是在嵌入式Linux中切换Qt

在Qt中切换键盘布局,而不是在嵌入式Linux中切换Qt,linux,qt,keyboard,keyboard-layout,qmap,Linux,Qt,Keyboard,Keyboard Layout,Qmap,我正在寻找一种在我的Qt应用程序中更改键盘布局的方法。该应用程序将在不支持键盘布局文件的Linux内核上运行,因此Qt必须完成有关键盘输入映射的所有工作 对于Qt for Embedded Linux,我在这里找到了一个好看的解决方案: 但不幸的是,根据此处的文档,QKbdDriverFactory类不适用于任何其他Qt版本: 无论如何,我都尝试过包含它(令人惊讶的是,类就在那里),但是每当我调用create函数时,编译器就会抛出“undefined reference”错误 我必须手动编程巨

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

对于Qt for Embedded Linux,我在这里找到了一个好看的解决方案:

但不幸的是,根据此处的文档,QKbdDriverFactory类不适用于任何其他Qt版本: 无论如何,我都尝试过包含它(令人惊讶的是,类就在那里),但是每当我调用create函数时,编译器就会抛出“undefined reference”错误

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

亚历克斯

编辑:其他信息: 我使用的是Qt 4.7.4(32位)和QtCreator 2.4.1。
我在虚拟机上使用64位的Ubuntu 12.04 目标系统是一个具有专用最小Linux内核的硬件,因此尝试使用Qt Embedded将非常困难。

没有Xcb服务器,没有帧缓冲插件(edit2:但我们确实使用帧缓冲),我也不知道DE或eglfs是什么意思。

似乎你应该实现自己的键盘支持层

  • 您没有
    dumpkeys
    程序,因此无法在设备上生成密钥映射文件。使用桌面版本
  • 桌面PC上生成的密钥码可能与您的设备生成的密钥码不同,所以您应该调整它们
  • 在调整keymap文件之后,您可以编写代码来读取这些文件
  • 根据当前使用的keymap,拥有KEY_CODE=>UTF8_字符的映射,您可以截取键事件并将其转换为输入符号

  • 这个问题缺乏重要信息。你在用DE吗?你在用X吗?您正在使用eglfs吗?你正在使用帧缓冲区插件吗?您使用的是哪个版本的Qt?这意味着您正在使用Qt4.8。那你为什么不使用嵌入式呢?好的,我添加了我能找到的信息。请注意,我是“Qt嵌入式”线程中的同一个人,所以让我们尽量避免冗余。我只是觉得最好创建一个新线程,因为这是一个新问题。DE意味着桌面环境。所以,它是嵌入式设备,好的。我仍然不明白您是如何在没有X11、帧缓冲区或EGL的系统上运行桌面Qt版本的。Linux图形模式可以是X11、帧缓冲区或EGL。看起来它不是一个传统的Linux系统。到底是linux吗?你得靠自己。由于没有kbd模块,您必须从头开始实现所有功能(请参阅LFS项目),或者要求您的内核供应商定制系统以满足您的需要更多关于Qt中EGL/X/Framebuffer支持的信息:但这是针对QT5的,您可能正在使用Qt嵌入式Android?谢谢,我会记住这一点,但现在我们决定尝试切换到Qt嵌入式。