1 背景
在做嵌入式开发过程中,由于嵌入式产品通常没有物理键盘,因此Virtual Keyboard必不可少。
参考资料[14]给出了一个最为简单的Virtual Keyboard案例:使用QPushButton做按键,然后将按键对应的内容setText到QLineEdit中。然而,这种方法只适合按键较少,并且编辑内容不多的情况。
参考资料[3]介绍了一企业版的Virtual Keyboard,然而没有办法去体验。
而参考资料[15]则给出了一个非常接近普通手机软键盘的案例,而且支持中文输入,据说还将会支持手写!
也就是说,目前而言,使用Qt实现的Virtual Keyboard从简单到复杂都,本文将针对现有的案例进行分析。
2 英文/数字输入
2.1 inputpanel
Qt版本:4.x
根据参考资料[5]的提示可知,Qt 4.8.3源码目录的examples/tools/中有个inputpanel的案例,里面包含了数字软键盘的实现,效果如下图所示:
图1.1 inputpanel效果图
2.1.1 实现思路
参考资料[13]说明了实现Virtually Keyboard的3中思路,本案例属于第2种。点击某个按键,然后触发对应的按键事件,而不是直接去写图1.1中的lineEdit编辑框。
2.1.2 扩展
参考资料[1]在此基础上,添加了英文字符的输入按键,并且支持通过拼音中文。参考资料[19]也采用同样的思路实现了简单的数字软键盘。
我在《Qt4 inputpanel 升级改造》一文中给出了一个扩展案例,并且提供相关源码。
2.1.3 使用方法
参考资料[1]不仅对此案例做了扩展,还说明的此键盘的使用方法,非常方便(使用QApplication的setInputContext函数设置软键盘即可使用):
MyInputPanelContext * ic= new MyInputPanelContext; app.setInputContext(ic);
2.2 Fancy Virtual Keyboard
Qt版本:4.x
参考资料[4][17]提供了一个Fancy Virtual Keyboard,效果如下图所示:
图1.2 Fancy Virtual Keyboard效果图
2.2.1 缺点
这个键盘看起来确实很Fancy,然而它也就一个很Fancy的键盘而已,并不能很好的和别的应用结合起来(以作为一个真正的键盘)。因为它只是简单的将键盘值qDebug()出来而已。中看不中用。
2.3 widgetKeyboard
Qt版本:4.x、5.x
参考资料[1]提供了Qt5和Qt4的Keyboard例程( widgetKeyboard_2009),下面是效果图:
图1.3 widgetKeyboard效果图
2.3.1 实现思路
触发按键事件的同时,使用QLineEdit的setText()方法来将内容显示到QLineEdit中。
2.3.2 缺点
1)Virtual Keyboard的弹出/隐藏需要使用用户点击指定的按键,不够人性化;
2)输入焦点的切换依赖CAPS键和RETURN键,不能由用户用鼠标进行选择;
3)使用setText来修改QLineEdit的值,每次都先读取原来所有的值到一个QString变量中,然后再对此变量进行修改。当QLineEdit中的内容比较多的时候,效率必然比较低。
3 中文输入
3.1 拼音输入法一
Qt版本:4.x
参考资料[20]提供了一个简单的例程,可用于进行拼音输入,效果图如下:
图3.1 拼音输入法一效果图
3.2 拼音输入法二
参考资料[1]在2.1小节所说的inputpanel的基础行进行改进,不仅添加了英文字符的输入方法,还添加了拼音输入法,效果图如下所示:
图3.2 拼音输入法二效果图
3.3 完善的中文输入法
参考资料[15]演示了一个非常接近于我们手机是用的输入法,只是暂时还没有办法获取其源码。
4 嵌入式Virtual Keyboard
上述的例程基本都不适用与嵌入式系统(除了3.3小节提及的例程),因为Virtual Keyboard的弹出会对输入框造成不同程度的遮挡,使得用户不能及时的看到输入的结果。针对这个问题,参考资料[15]所演示的案例就很好的解决了这个问题。
5 开源项目
5.1 maliit-keyboard
参考资料[28]介绍了在Qt应用中可用的virtual keboard,其中就包含有maliit-keyboard的介绍。参考资料[25~27]对maliit-keyboard做了更为详细的介绍,并且提供了源码。y源码编译和安装方法见《Ubuntu14.04中编译安装maliit》。
在ubuntu中,可以使用apt-get工具安装maiiit-keyboard,例如u:
sudo apt-get install maliit-keybaord
5.2 ubuntu-keyboard
sudo apt-get install ubuntu-keyboard
参考资料
[1]QT 软键盘
[2]关于qt软键盘的问题
[3]Qt Virtual Keyboard
[4] Fancy-Virtual-Keyboard
[5]QT 中的软键盘例子
[6]Qt5 virtual keyboard
[7]New Virtual Keyboard for Qt Enterprise
[8]VirtualKeyboard
[9]Virtual Keyboard Widget for Qt
[10]Virtual Keyboard Tools 0.5.1
[11]VirtualKeyboard 2015.07
[12]基于QT/E的嵌入式Linux系统的软键盘实现
[13]qt模拟键盘
[14]Qt 软键盘[模拟]之键盘触发事件
[15]Qt全平台 虚拟键盘 输入法 第三弹 增加内嵌挤压窗口模式
[16]Qt Input Method – Virtual Keyboard
[18]软键盘输入法(支持中文输入法,功能优化ing)
[19]软键盘输入
[20]QT4.5简单中文输入法(原创)
[21]Embedded Linux Maliit Virtual Keyboard
[22] Maliit on Windows: Basic build working
[23]移植Maliit笔记
[24]如何在QT里使用Maliit软键盘
[25]maliit-framework package in Ubuntu
[26]Maliit
[27]Maliit_GitHub
[28]virtual keyboard in QT Application
[29]Qt输入法设计(嵌入式)
[30]成功移植qt软键盘和输入法到arm开发板的qt程序中
[31]视频: Qt全平台 虚拟键盘 输入法 第一弹 实现中英数输入法
[32]视频: Qt全平台 虚拟键盘 输入法 第二弹 增加词组输入和联想输入