当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]基于Qt/E的嵌入式Linux中文输入法的设计与实现

摘要:设计了一种小巧的、具有良好的移植性和扩展性的系统级拼音输入法,企业应用表明,能够满足产品中文输入的要求。

0引言

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

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

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

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

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

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

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

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

<center>

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

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

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

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

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

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

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

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

图2Qt/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(constQString&)),this,SLOT(change(c‘)nstQString&)))

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

 

图3软键盘界面

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

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

2。3输入法设计

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

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

virtualboolfilter(intunicode,intkeycode,intmodifiers,bootisPress,boolautoRepeat)

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

voidsendc0mmitstring(constQString&eommitString,intrepIaceFromPosi"on:0,intreplaceLength=0)

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

voidsel1dPreeditsng(constQString&preeditString,inteursorPosition,intselectionLength=0)

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

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

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

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

QWSServer::setcurrentInputMeth0d(pinyin)

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

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

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

center>

图5运行结果

3结语

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

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

多数受访粉丝认为,AI驱动的功能会对他们观看体育赛事的方式产生重大影响 超过半数的受访者希望通过AI技术获得对过去、现在和未来体育赛事的评论和分析 移动体育应用...

关键字: IBM AI 应用程序 移动

北京2025年8月15日 /美通社/ -- 亚马逊云科技日前宣布,Amazon DocumentDB Serverless已正式可用,这是Amazon DocumentDB(兼容MongoDB)的一种全新配置,能够根据应...

关键字: DOCUMENT SERVER 亚马逊 数据库管理

北京 2025年6月10日 /美通社/ -- 亚马逊云科技日前宣布,推出开源的Amazon Serverless Model Context Protocol (MCP) Server工具。该工具将AI辅助功...

关键字: SERVER MCP 亚马逊 开源工具

青岛 2025年5月23日 /美通社/ -- 全球领先的消费电子和家电品牌海信今天宣布将谷歌全新Home API集成至其ConnectLife应用程序。今年秋季前,用户可通过该应用程序将第三方智能家居设备接入Conne...

关键字: API NEC 海信 应用程序

-Arya.ai推出MCP应用程序,将通用LLM转化为特定领域专家 印度孟买和纽约 2025年5月13日 /美通社/ -- Arya.ai今天宣布推出APEX MCP(模...

关键字: MCP 应用程序 AI 人工智能

这项新的AI原生功能变革了测试编排,使其设置变得简易、智能且极其迅速。 印度诺伊达和旧金山2025年4月19日 /美通社/ -- 统一代理AI和云工程平台LambdaTes...

关键字: ECU MCP SERVER 自动化

北京2025年1月15日 /美通社/ -- 2025年1月8日,STIF第五届国际科创节暨新质生产力领航者峰会在北京举行。作为科技创新与数字化服务领域最具影响力的年度盛会之一,本届大会汇聚全球科创品牌,旨在通过构建多元、...

关键字: 数字化 APP 互联网 应用程序

推动技术创新与业务增长 北京2024年12月19日 /美通社/ -- 在亚马逊云科技2024 re:Invent全球大会上,亚马逊云科技与东南亚领先的超级应用程序Grab共同宣布,Grab已选择亚马逊云科技为首选云服务...

关键字: 亚马逊 应用程序 云服务 AI技术

Amazon Aurora DSQL是一款性能卓越的分布式SQL数据库,具备99.999%的多区域可用性、几乎无限的可扩展性、强一致性,且完全消除了基础设施管理的负担。 北京2024年12月13日 /美通社/ -- 亚...

关键字: 亚马逊 分布式 SQL数据库 应用程序

为数据、分析和AI提供统一平台 北京2024年12月10日 /美通社/ -- 亚马逊云科技在2024 re:Invent全球大会上,宣布推出新一代Amazon SageMaker,将客户所需的快速SQL分析、PB级大数...

关键字: 亚马逊 MAKER GE 应用程序
关闭