0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于Qt/E的中文输入法的设计

电子设计 来源:郭婷 作者:电子设计 2018-12-06 07:44 次阅读

引言

随着嵌人式系统在信息家电、移动通信、手持设备以及工业控制等众多领域的广泛应用,国内用户对支持中文输入法的轻量级GUI的需求日益迫切。

Qt/E是Nokia公司发布的面向嵌人式系统的Qt版本,正日益成为嵌入式GUI开发的主流,被越来越多的国内外厂商用于便携式电子设备的开发,然而它并没有提供中文输入法。目前国内在Qt/E平台下开发的中文输入法主要有2种方式:

1)移植现有的PC机系统下的基于Qt/X1 1的中文输人法,移植了基于X Window下的XIM输入协议的中文输入法,但其需要X Window下Xlib库的支持,这将增大系统开销,减慢显示的速度。

2)使用Qt/E插件的方法,其需要一个桌面应用管理程序,一般移植Qt/E自带的qpe桌面管理程序来管理输入法,这将给不需要桌面管理的设备带来额外的开销。

基于此,本文开发了一种Qt/E平台下的小巧的中文输入法,在不增加系统开销也不影响移植性和扩展性的前提下,使用户可以方便地输人中文、英文及各种字符,并根据项目实际需要,设定输出汉字的字体和大小,可减小应用程序开发的难度和复杂度。

1 Qt/E的体系结构与输入法设计原理

Qt/E和Qt/Xl 1是Nokia公司开发的面向嵌入式系统和Pc机的不同Qt版本。Qt/E与Qt/X11最大的区别就在于它们所依赖的底层显示基础的不同,这也就导致了它们在体系结构上的差异。对于Qt/Xl1来说,底层的显示技术构建在x WindowSystem之上,完全依赖于X Window System。

Qt/E在这方面则完全不同,它并没有构建在xWindow System 之上,而是构建在Linux的FrameBuffer之上,把需要在界面上显示的内容直接写入Frame Buffer。因为在嵌入式系统上把X System给省略了,可以节省许多的系统开销。而直接写FrameBuffer,又会加快显示速度。Qt/E与Qt/Xl 1体系构架对比见图1。

基于Qt/E的中文输入法的设计

图1 Qt/E和Qt/X11体系构架对比

这一改变,导致了在Qt/E多出了1个Server层,该层负责监听系统事件,尤其是键盘和鼠标事件、屏幕输出、管理注册、管理顶层窗口等诸多功能。系统产生的键盘鼠标事件,首先就传给了这个Server层,然后Server层在根据具体的情况把这些事件分发给相应的应用程序。

每一个Qt/E应用程序都需要一个这样Server层存在 ].所以,第1个运行起来的Qt/E应用程序就会启动这个Server层并让自己成为这个Server进程,后续运行的程序就会连接到这个Server层来管理自己。在Server端,每一个连接到Server层的Client都有一个QWSClient对象与之对应,这个对象主要记录了Client ID.在应用程序中每创建一个顶层窗口,那么在Server端就会有创建一个QWSWindow实例来与之对应。

当Server收到一个Event时,它需要判断应该发送给哪个窗口,这时候,它就会从QWSWindow列表中去找,然后根据这个窗口去找对应的Client应用程序,最后用QWSEvent对象来包装这个Event.

通过Socket机制发送给具体的Client应用程序。

基于以上原理,为了设计一个系统级中文输入法,需要把输入法的设计放在Server层上。具体来说,就是把输入法写为Server层的一部分,作为Server进程运行。

如果当前系统Server层安装了一个输入法,那么每次键盘事件产生的时候,就会先送给输入法,让输入法来做判断,看输入法是否会处理这个键盘按键,如果输入法可以处理,就不再继续分发这个事件,否则就会按照原先的事件分发机制继续分发这个事件。输入法会在应用程序之前处理键盘事件并根据用户选择发送相应汉字到客户端应用程序。

Qt/E拼音输入法的客户/服务器模型见图2.

基于Qt/E的中文输入法的设计

图2 Qt/E拼音输入法的客户/服务器模型

2 中文输人法的设计与实现

Qt/E2.3版本提供了针对亚洲语系双字节输入法支持 .可通过继承QWSInputMethod类构造输入法实例,其接受的按键事件既可以来自于物理键盘,也可以从虚拟键盘产生,QWSInputMethod类提供键盘过滤器拦截按键消息,根据用户所选择的输入法,输出相应的字符到目标程序。

2.1 拼音输入法的功能

本输入法的界面见图3.当单击软键盘上面的输入法按键时,系统弹出软键盘面板,若选择中文输入法,则首先检测输入的按键组合是否是正确的拼音组合,如果是,将该拼音组合显示在拼音输入框中。接下来将匹配的汉字显示到汉字显示框,汉字显示框每页允许显示1O个汉字,如果没有所需汉字,可以通过翻页键翻页查找。找到所需汉字后,单击相应的数字键,即可将相应汉字输入到当前应用程序的输入窗口中。随后,汉字显示框将继续显示下一页供用户继续选择输入。

2.2 输入法窗口的设计

输入法窗口由中英文切换键、拼音输入框、汉字显示框和软键盘组成,软键盘的按键类PushBut-ton继承自Qt的QToolButton类。

当按键被按下时发送信号keyPress,由信号keyPress触发sendKey槽来实现拼音输入框显示。

connect(btn,SIGNAL(keyClick(Qt::Key )),this,SLOT(sendKey(Qt::Key,bool,boo1))

当拼音输入框变化时会触发汉字显示框的变化,由textChanged信号触发change槽,显示汉字。

connect(inpyLineEdit,SIGNAL(textChanged(const QString&)),this,SLOT(change(c')nst QString&)))

在这个软键盘中,共需要实现拼音、英文大小写、各种符号及一般的功能按键,其键盘的布局设计在Qt Designer中,由于嵌入式系统显示屏大小的关系,需要一键多用,所以本文通过读取XML文档的方式来显示按键上的text文本。例如:0键对应序号为nr="15",初始化时PushButton 0键text设置为"0",当按下shift时,text设置为"!", 按下shift时text设置为"0",keycodeI,2,3为Qt::Key值,XML文档格式如下:

基于Qt/E的中文输入法的设计

图3 软键盘界面

软键盘左上角的Check Box用于中英文切换,选中时,输人中文,不选时输入的则是英文,在英文输入时,若按下Caps键软键盘面板上的数字键,切换成常用符号,英文全变成大写。1-r按键是本输入法的特色,按下1-r键可以选择需要输出汉字的字体和大小,其余的按键功能同Pc机键盘。

因为没有桌面管理程序,本文还设计了一个置顶的浮动框,用于打开软键盘。当点击输入法按键时,弹出软键盘。

2.3 输入法设计

Qt/E输入法基类为QWSInputMethod,在这个基类中定义了一些接口用以支持输入法程序设计,并从QWSInputMethod这个类继承出一个输入法类,在这个类中处理键盘和鼠标事件,把接收到的键盘事件按照输入法的编码规则转换为对应的中文,一个汉字,或者是一个中文短语,并把最终用户的选择发送到当前编辑窗口。

1nputMethod类继承QWSInputMethod类来实现输入法的处理,在这里实现的几个主要的接口函数有:

virtual bool filter(int unicode,int keycode,intmodifiers,boot isPress,bool autoRepeat)

这个接口的作用就是过滤键盘事件,在这个函数中处理键盘输人,并且根据相应的输人法方法把键盘输入转换为相应的中文。

void sendc0mmitstring(const QString& eommitString,intrepIaceFromPosi"on:0,int replaceLength =0)

这个接口函数表示把相应的字符串发送到当前编辑窗口,一般用于在用户作出最终的选择之后,把相应的字符串发送出去。

void sel1dPreedits ng(const QString& preeditString,inteursorPosition,int selectionLength =0)

把当前正在编辑的字符串发送给当前编辑窗口。

为了使输入法成为系统级输入法,在这个类中还需要实现输入法安装/卸载函数,这样系统中才会有全局的输人法模块,输入法才能工作 .

install和release输入法的函数,就是通过调用QWSServer类中的成员函数来实现的。QWSServer::

setCurrentInputMethod这个函数为当前的Qt/E安装一个输入法,如设置拼音输入法:

QWSServer::setcurrentInputMeth0d(pinyin)

如果把参数设置为NULL,就是卸载输入法。输入法安装完成之后,输入法类中就可以接收到键盘事件了,拼音输入法的具体流程见图4。

基于Qt/E的中文输入法的设计

图4 拼音输入法按键处理流程

最终拼音输入法在三星S3C2440平台上运行的界面见图5.

基于Qt/E的中文输入法的设计

图5 运行结果

3 结语

本文基于三星S3C2440平台,实现了基于Qt/E4.5的拼音输入法,并重点阐述了Qt/E的中文输入法原理,在这个基础上可以比较容易地开发出其他的中文输入法。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Window
    +关注

    关注

    0

    文章

    82

    浏览量

    37263
  • 三星电子
    +关注

    关注

    34

    文章

    15862

    浏览量

    181007
  • 移动通信
    +关注

    关注

    10

    文章

    2611

    浏览量

    69865
收藏 人收藏

    评论

    相关推荐

    【AWTK使用经验】如何添加中文输入法

    目前需要在AWTK程序中用到中文输入法,并且要自定义输入法的联想词,此时需要用到AWStudio添加软键盘和输入法。下面将介绍如何使用AWStudio在项目中添加
    的头像 发表于 06-20 08:25 1044次阅读
    【AWTK使用经验】如何添加<b class='flag-5'>中文输入法</b>

    中文输入法在B超系统中的应用

    中文输入法在B超系统中的应用本文对中文输入法在B超系统中的实现进行了介绍。 在计算机迅速发展和普及的今天,用计算机对汉字进行输入、编辑和处理已经非常普遍了。在医疗电子产品中,越来越多的场合需要显示
    发表于 11-30 10:15

    在Labview中如何控制输入法

    在写程序中遇到一个问题:如何在进入程序时将输入法更改为英文输入法,一般默认是中文输入法,当按下键时,输入法会跳出来,而程序则不会响应这个按键。所以想在进入程序时,将系统
    发表于 11-26 15:47

    Orange Pi 4开发板在Ubuntu系统下如何安装中文输入法

    弹出的窗口中勾选Control,去掉Super前面的勾,然后点击Apply。再点击ok。【图9】回到上一个窗口,点击 Input Method。【图10】如下图,只有英文。点击Add添加中文输入法
    发表于 05-19 15:13

    求wince中文输入法

    各位大神,求一个wince的免费中文输入法,能分享一下吗
    发表于 06-24 08:50

    如何实现ARM-LINUX嵌入式设备上的中文输入法

    如何实现ARM-LINUX嵌入式设备上的中文输入法
    发表于 12-23 06:15

    OKMX6UL-C开发板自带linux系统怎么安装中文输入法

    请问一下,OKMX6UL-C开发板自带linux系统,怎么安装中文输入法
    发表于 01-11 06:37

    KICAD6与中文输入法冲突

    目前在多台电脑试过,windows10开中文输入法,即使是英文输入状态,操作KICAD6会卡死,现象就是鼠标没反应了,啥也做不了,只能结束进程。多台电脑验证过了。windows11开中文输入法,KICAD6不崩溃,两台电脑验证过
    发表于 04-30 11:55

    【飞凌RK3568开发板试用体验】添加中文输入法

    由于英文版的ubuntu20没有安装拼音、五笔输入法,经过查询资料,把中文输入法解决了,这里记录一下,以便后来查询:1、先把fcitx彻底卸载:sudo apt remove fcitxsudo
    发表于 11-29 20:57

    嵌入式中文输入法设计

    本文比较了嵌入式系统中拼音输入法和笔画输入法的优缺点,介绍了嵌入式系统中的中文输入法的基本设计思想。本文重点介绍拼音输入法的设计思想,并针对传统拼音
    发表于 06-19 08:29 41次下载

    手机中文输入法

    手机中文输入法              中文输入法
    发表于 12-19 13:58 544次阅读

    掌上电脑中文输入法有哪些?

    掌上电脑中文输入法有哪些?             掌上电脑有多种文
    发表于 12-21 17:36 1731次阅读

    电脑辞典中文输入法及其他功能

    电脑辞典中文输入法及其他功能  中文输入法     
    发表于 12-22 11:45 859次阅读

    中文输入法在B超系统中的实现

    本文对中文输入法在B超系统中的实现进行了介绍。 字库设计 通常的汉字显示方式是:先用字模软件提取所需要的汉字点阵,取得的数据可放入ASM汇编文件中,接着
    发表于 09-16 11:12 1040次阅读
    <b class='flag-5'>中文输入法</b>在B超系统中的实现

    没有对比就没伤害!iOS上最好用的输入法你知道吗?

    iPhone上的中文输入法很多,但中国用户最熟悉的应该有三家,搜狗输入法、百度输入法、讯飞输入法。那么问题来了,这三家APP Stroe上最受欢迎的
    发表于 08-14 17:21 8.5w次阅读