4

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

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

我在文档中搜索并没有找到任何关于布局切换的信息。

我认为这与文档中指定的 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

4

3 回答 3

7

4.6 版获得了键盘映射支持。解决方案:

  1. 生成kmap文件:

    ckbcomp -layout xx > xx.kmap

  2. 将 kmap 转换为 qmap

    kmap2qmap xx.kmap xx.qmap

  3. 通过加载键盘映射

    1. 指定 QWS_KEYBOARD 环境变量:

      QWS_KEYBOARD="TTY:keymap=xx.qmap"

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

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

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

      delete currentKeyboardHandler;
      currentKeyboardHandler =
          QKbdDriverFactory::create("TTY", "keymap=bar.qmap");
      

似乎 Qt for Embedded linux 已被Project Lighthouse取代。不过不确定,如果它已准备好生产,我也不知道它如何处理键盘布局切换。

更新

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

于 2010-04-21T12:05:52.003 回答
3

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

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

于 2012-03-29T19:01:35.247 回答
0

无法评论,所以这是答案

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

这个简单的 qkbd_qws.cpp 补丁可以通过 CapsLock 按钮切换 beteewn 语言。

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;
于 2014-02-03T12:10:51.237 回答