Qt Embedded for Linux。键盘布局切换

时间:2010-04-19 17:24:07

标签: qt internationalization keyboard-layout qtembedded

我正在使用Qt Embedded开发应用程序并在linux framebuffer中运行它。我需要一种方法来输入非美国字符。是否可以用Qt更改键盘布局?

我试图在Qt / X11上运行它。布局切换和输入在那里非常好。 但是当我使用Qt / Embedded编译并在framebuffer中运行它时,我无法改变布局。

我在documentation中搜索过,但没有找到任何有关布局切换的信息。

我认为它与 documentation中指定的qt键盘驱动程序有关。 看来我应该开发自己的键盘驱动程序。但我正在使用标准键盘,我认为必须有一种标准的方式来改变输入语言?

你会建议什么?

顺便说一句,我正在使用4.5版本。也许4.6有什么可以解决这个问题?

在这里遇到同样的问题:

http://lists.trolltech.com/pipermail/qt-embedded-interest/2008-August/000034.html

http://lists.trolltech.com/qt-interest/2004-02/msg00570.html

3 个答案:

答案 0 :(得分:7)

版本4.6获得了keymap support。解决方案:

  1. 生成kmap文件:

    ckbcomp -layout xx> xx.kmap

  2. 将kmap转换为qmap

    kmap2qmap xx.kmap xx.qmap

  3. 通过

    加载键映射
    1. 指定QWS_KEYBOARD环境变量:

      QWS_KEYBOARD = “TTY:键盘映射= xx.qmap”

    2. 或动态加载键盘映射:

      QWSKeyboardHandler * currentKeyboardHandler =
          QKbdDriverFactory::create("TTY", "keymap=foo.qmap");
      

      确保在创建新处理程序时删除创建的处理程序:

      delete currentKeyboardHandler;
      currentKeyboardHandler =
          QKbdDriverFactory::create("TTY", "keymap=bar.qmap");
      
  4. 似乎Qt for Embedded linux被Project Lighthouse取代。但不确定,如果它已准备就绪,我也不知道它是如何处理键盘布局切换的。

    <强>更新

    Qt5没有QWS,所有与QWS相关的API都被删除了。所以你需要一些第三方解决方案。或者为QPA编写一个插件。

答案 1 :(得分:3)

  

我需要一种输入非美国字符的方法

您可以更改qmap,但即使在Qt 4.8.0中也无法在美国和俄语之间切换(例如)。您需要修补kmap2qmap(添加AltGr_Lock支持),qkbd_qws.cpp(根据AltGr_Lock的状态更改testmods)。看起来没有人使用QtEmbedded与键盘。或者所有人都将最后的补丁保密。

答案 2 :(得分:0)

无法发表评论,所以这是

的答案
  

您需要修补kmap2qmap(添加AltGr_Lock支持),qkbd_qws.cpp(根据AltGr_Lock的状态更改testmods)。

这个qkbd_qws.cpp的简单补丁通过CapsLock按钮启用了转换beneswn语言。

523,526c523,524
<             //if (d->m_locks[0] /*CapsLock*/ && (m->flags & QWSKeyboard::IsLetter))
<             //    testmods ^= QWSKeyboard::ModShift;
<             if (d->m_locks[0] /*CapsLock*/)
<                 testmods ^= QWSKeyboard::ModAltGr;
---
>             if (d->m_locks[0] /*CapsLock*/ && (m->flags & QWSKeyboard::IsLetter))
>                 testmods ^= QWSKeyboard::ModShift;