首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt Embedded for Linux键盘布局切换

Qt Embedded for Linux键盘布局切换
EN

Stack Overflow用户
提问于 2010-04-20 01:24:07
回答 3查看 5.8K关注 0票数 4

我正在开发嵌入Qt的应用程序,并在linux帧缓冲区中运行它。我需要一种方法来键入非美国字符。可以使用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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-21 20:05:52

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

  1. 生成kmap文件:

xx.kmap

  • convert kmap to -layout xx > ckbcomp kmap to qmap

kmap2qmap xx.kmap xx.qmap

  • load keymap by

代码语言:javascript
复制
1. specifying QWS\_KEYBOARD environment variable:

QWS_KEYBOARD="TTY:keymap=xx.qmap“

2.或动态加载快捷键映射:

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

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

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

嵌入式linux的Qt似乎已经被Project Lighthouse取代了。我不确定它是否可以投入生产,我也不知道它是如何处理键盘布局切换的。

更新

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

票数 7
EN

Stack Overflow用户

发布于 2012-03-30 03:01:35

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

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

票数 3
EN

Stack Overflow用户

发布于 2014-02-03 20:10:51

无可奉告,所以这就是答案

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

这个简单的qkbd_qws.cpp补丁可以通过CapsLock按钮在不同语言之间切换。

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2669464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档