Qt Virtual Keyboard

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的案例,里面包含了数字软键盘的实现,效果如下图所示:

Qt Virtual Keyboard_第1张图片

                       图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,效果如下图所示:

Qt Virtual Keyboard_第2张图片

                                                            图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),下面是效果图:

Qt Virtual Keyboard_第3张图片

                                                                          图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]提供了一个简单的例程,可用于进行拼音输入,效果图如下:

Qt Virtual Keyboard_第4张图片

                            图3.1 拼音输入法一效果图

3.2 拼音输入法二

    参考资料[1]在2.1小节所说的inputpanel的基础行进行改进,不仅添加了英文字符的输入方法,还添加了拼音输入法,效果图如下所示:

Qt Virtual Keyboard_第5张图片

                                图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全平台 虚拟键盘 输入法 第二弹 增加词组输入和联想输入

你可能感兴趣的:(Qt Virtual Keyboard)