我正在使用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
答案 0 :(得分:7)
版本4.6获得了keymap support。解决方案:
生成kmap文件:
ckbcomp -layout xx> xx.kmap
将kmap转换为qmap
kmap2qmap xx.kmap xx.qmap
通过
加载键映射指定QWS_KEYBOARD环境变量:
QWS_KEYBOARD = “TTY:键盘映射= xx.qmap”
或动态加载键盘映射:
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编写一个插件。
答案 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;