QtE的嵌入式中文输入法的设计与实现Word格式.docx
- 文档编号:18346034
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:18
- 大小:30.76KB
QtE的嵌入式中文输入法的设计与实现Word格式.docx
《QtE的嵌入式中文输入法的设计与实现Word格式.docx》由会员分享,可在线阅读,更多相关《QtE的嵌入式中文输入法的设计与实现Word格式.docx(18页珍藏版)》请在冰豆网上搜索。
Keywords:
embedded;
qt/e;
chineseinputmetho
1绪论
1.1课题研究的意义
(1)嵌入式产业快速的发展
当今社会,嵌入式产业的高速发展,使嵌入式产品广泛运用于各个领域中,如:
智能家电,车载GPS,手持设备,等等领域,嵌入式产品已经成为人们生活中离不开的一部分。嵌入式系统没有一个明确的定义,目前业内专家学者一致比较认可的定义是:
嵌入式系统是指以应用为中心,以计算机技术为基础,软硬件可裁剪,适应于应用系统对功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统。从定义可知,嵌入式系统也是一种计算机系统,是针对某一应用的专用计算机系统,嵌入式系统可以定制,因此,嵌入式系统的发展很快。
(2)输入法在人机交互中必不可少
GUI是人机交互不可缺少的部分,一个产品GUI的好坏往往决定了这个产品的优劣,而嵌入式GUI具有下面几个方面的基本要求:
轻型、占用资源少、高性能、高可靠性、便于移植、可配置等特点。一个良好的GUI肯定要有一款人性化的输入法。嵌入式设备的发展趋势中,重要的一点是要低功耗,尽可能的减少系统的开销,因此嵌入式设备的输入法也需要在保持功能的前提下,将系统开销降低最低。
Qt的跨平台性非常良好,目前,大部分嵌入式GUI用Qt开发的。
1.2嵌入式中文输入法的研究现状
嵌入式的迅猛发展,目前,在手持设备的移动终端中,广泛采用以液晶触摸显示屏实现的人性化的人机交互式GUI。
人机交互GUI,在不同应用领域的场合,对人机GUI的要求也不尽相同,一些情况下,只要求显示和选择一些简单的结果和参数,而在大部分移动信息终端中,要求字符的输入,有些智能终端中不仅要求有英文,数字的输入,更需要中文汉字的输入。
目前国内外的嵌入式中文输入法,都是在Qt/E平台下应用和开发的,在这平台下应用的,主要有两种嵌入式中文输入法:
(1)其中一种输入法是移植一般PC机Windows系统下,现有的中文输入法,该输入法是基于Qt-X11的,移植了该中文输入法到嵌入式设备,但该输入法需要Windows系统下的Xlib库的支持,这会导致系统需要很大的系统资源,很是影响系统的运行效率。
(2)另外一种输入法是使用了Qt/E平台自带插件的方法,但该输入法需要一个桌面系统来管理该输入法,为了管理该输入法,往往移植了Qtopia这个Qt/E下的桌面系统来管理该嵌入式中文输入法,但是,一般的手持设备是不需要桌面管理系统的,该嵌入式中文输入法给这类设备带来了不必要的额外的开销,造成了系统资源的严重浪费。
1.3课题研究内容及目标
1.3.1课题研究的内容
本课题主要讨论了一种基于Qt/E的嵌入式中文拼音输入法的研究与实现的方法。
课题的主要研究的内容是:
Qt/E开发环境的搭建,嵌入式现状的分析,交叉编译环境的搭建,Qt/E体系结构的研究,中文输入法的实现,输入法安装到目标板的实现。
1.3.2课题研究的目标
针对以上情况,决定组建一个界面友好,功能完善的基于Qt/E嵌入式中文拼音输入法,该输入法可以实现中英输入的切换,实现中文,英文,数字及常用标点符号的输入,输入法最大限度地实现了易移植性和易操作性。
输入法运行稳定、安全可靠。
1.3.3开发平台的选择
本系统将在Linux系统里,用QtDesigner4作为界面设计工具,Vim作为开发环境,arm-linux-gcc-4.4.3作为交叉编译器,Qt为开发语言,运行环境为Qt/E。
具体技术将在下一章中介绍。
2相关技术概述
2.1交叉编译简介
交叉编译,通俗的讲就是在一个平台上生成另一个平台上的可执行的代码。
所谓的平台,实际上包含两个概念:
体系结构、操作系统。
同一个体系结构可以运行不同的操作系统;
同样,同一个操作系统也可以在不同的体系结构上运行。
举例来说,常说的x86Windows平台实际上是Intelx86体系结构和Windowsforx86操作系统的统称;
而x86Linux平台实际上是Intelx86体系结构和Linuxforx86操作系统的简称。
嵌入式设备一般对系统资源比较敏感,不能运行软件的开发环境,只执行程序,嵌入式设备叫做目标机;
一般的pc机上运行开发环境和编译器,pc机叫做宿主机。
在宿主机平台上开发程序,并在这个平台上运行交叉编译器,编译的程序;
而由交叉编译器生成的程序将在目标平台上运行。
伴随着以计算机技术、通讯技术为主的信息技术的飞速发展和互联网的广泛应用,计算机,通讯,消费电子,三者合一将成为必然趋势。
信息家电,手持设备,移动设备等嵌入式产品的迅速发展,使得嵌入式软件开发再度成为一个研究热点。
由于嵌入式设备的性能局限,往往不能通过本机编译得到所需软件的可执行程序。
因此,以Linux为主机操作系统,搭配一个交叉编译系统,为嵌入式设备生成可执行程序已成为现在日益流行的编译嵌入式软件的解决方案。
而开放源码的编译器GCC,经过多年的发展,已能支持几乎所有知名厂商的处理器,是嵌入式软件开发中理想的交叉编译器。
2.2Qt简介
Qt是诺基亚公司开发的一个跨平台的C++图形用户界面应用程序框架。
它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。
Qt是完全面向对象的,最有很强的扩展性,并且允许真正的组件编程。
从1996年,Qt进入商业领域,它已经成为全世界范围内数千种成功的应用程序的基础。
Qt也是流行的Linux桌面环境KDE的基础。
Qt具有下列优点:
优良的跨平台特性,面向对象,丰富的API,支持2D/3D图形渲染,支持OpenGL,大量的开发文档,XML支持,Webkit引擎的集成,可以实现本地界面与Web内容的无缝集成。
2.3Qt/E简介
Qt/E,全称为QtforEmbedded,是Qt面向嵌入式开发的一个版本,通常所说的Qt是Qtforx11Linux,是Qt面向pc机的一个版本,Qtforx11Linux和QtforEmbeddedLinux最大的差别,在于二者要显示界面的内容,所依赖的显示基础不同,这导致了两者在体系结构上的根本差异。
Qtforx11Linux:
底层的显示技术构建在Window系统之上,完全依赖于Windows系统,在下层调用了XLib的系统方法来显示界面上的图像。
Qtforembeddlinux:
没有构建在Window系统之上,而是构建在了Linux系统下的framebuffer之上,把在人机GUI上需要展示的元素写入framebuffer。
因为在嵌入式设备上省略了X系统,大大节省了许多的不必要的系统开销,需要在GUI展示的图像,直接写入了framebuffer,节省了系统资源,大大加快了显示速度。
这是Qt/E的最大优势。
两者的体系结构差别,如图2-1所示:
图2-1Qt/E和Qt/X11体系架构对比
因此,Qt/E具有服务端层,这一层主要负责监听系统的事件,如:
主要是keyboard和mouse事件,移动终端输出事件,管理域,管理top窗口,管理光标和管理屏幕保护程序等等诸多功能。
系统被触发产生的keyboard和mouse事件,首先就传给服务端层,然后服务端再根据具体的实际情况把以上事件分派给,相对应的应用程序和软件。
2.4Vim简介
Vim是Linux系统下最常用的文本编辑器,Vim是一个类似于Vi的文本编辑器,Vim是Vi的升级版,Vim在Vi的基础上增加了很多新的特性,Vim普遍被推崇为类Vi编辑器中最好的一个。
80年代末,出现了Vim的1.0版本。
最初的目标只是完全复制vi的功能,那个时候的Vim是ViIMitation(模拟)的简称。
1991年Vim1.14版被"
FredFishDisk#591"
这个Amiga用的免费软体集所收录。
1992年1.22版本的Vim被移植到了UNIX和MS-DOS上。
从此,Vim的全名就正式变成ViImproved。
Vim的发展很迅速,在这之后,Vim加入了不计其数的新功能。
作为第一个里程碑的是1994年的3.0版本加入了多视窗编辑模式(分割视窗)。
从那之后,同一屏幕可以显示的Vim编辑文件数可以不止一个了。
1996年发布的Vim4.0是第一个利用图型接口(GUI)的版本。
1998年5.0版本的Vim加入了highlight(语法高亮)功能。
2001年的Vim6.0版本加入了代码折叠、插件、多国语言支持、垂直分割视窗等功能。
2006年5月发布的Vim7.0版更加入了拼字检查、上下文相关补完,标签页编辑等新功能。
现在最新的版本是2008年8月发布的Vim7.2,该版本合并了Vim7.1以来的所有修正补丁,并且加入了脚本的浮点数支持。
3系统需求分析
3.1需求分析的目的
需求分析就是要明确需求方和开发放需要开发一个什么样的产品才能满足客户的需求,即明确“需要干什么”,不需要知道“怎么干”。
本系统要实现的是一个用于嵌入式GUI的中文拼音输入法,因为要适用于嵌入式平台下,因此该输入法应占用较少的系统资源,输入法界面要美观,输入要方便,中英输入法切换要方便。
3.2需求分析的地位与作用
需求分析是开发软件是否成功的决定因素。
软件工程中大多数的问题都是因为需求分析不当或者是需求分析考虑不周全而导致的。
在软件需求分析的过程中,导致问题的出现主要包括以下方面,包括用户的需求不明确,需要实现的功能不明确,、需求的文档不是很完善等,都可能造成产品开发的过程中的出现很多困难。
软件需求分析,虽然是软件开发整个周期的开始阶段,但也是软件开发整个周期中最为关键的一个阶段,关系到工程开发成败的一个关键步骤。
3.3系统应该满足的功能
通过调查研究显示,一个良好的输入法不仅仅要使用户输入起来方便,更需要安全、可靠、高效的系统支持。
本输入法的要求是:
(1)要求具有良好的界面。
(2)占用系统资源少。
(3)输入方便。
本系统需要实现的功能是:
中文,大小写英文,常用标点符号的输入,具有软键盘,并支持触摸屏,具体功能模块如图3-1所示:
图3-1系统功能模块图
4系统设计
4.1搭建Qt/E开发环境
在进行开发之前,首先决定的第一个问题就是,该使用什么开发环境来编写该系统?
目前常见的嵌入式GUI,主要有Qt,GTK+几种工具,Qt的移植性更强,基于此,本系统采用Qt来开发。
Qt是诺基亚开发的一个跨平台性很强的基于C++图形用户GUI开发库。
开发语言为C++。
有很多的有优点,如:
具有优良的跨平台特性、面向对象、丰富的API、大量的开发文档。
移植步骤:
(1)准备好如下源码包:
Qt/E源码包:
qt-embedded-linux-opensource-src-4.5.0.tar.bz2
Qt-x11源码包:
qt-x11-opensource-src-4.5.0.tar.bz2
触摸屏源码包:
tslib-1[1].4.tar.gz
(2)编译安装tslib-1.4
编译tslib-1.4应设置好参数,具体参数如图4-1所示:
图4-1编译tslib参数
(3)编译安装Qt-x11-4.5.0
安装Qt-x11-4.5.0时,最关键的步骤是设置Qt-x11-4.5.0的环境变量
环境变量具体如图4-2所示:
图4-2Qt-x11-4.5.0环境变量
(4)编译安装Qt/E4.5.0
编译安装Qt/E4.5.0时,需设置好编译参数,具体参数如图4-3所示:
图4-3编译Qt/E4.5.0参数
“-I/home/mytslib/include-L/home/mytslib/lib”指明刚才编译出来触摸屏的库文件及头文件存放路径。
“-qt-mouse-tslib”表示将使用触摸屏。
编译完成后,安装时,最关键的步骤还是设置环境变量
具体的环境变量如图4-4所示:
图4-4Qt/E4.5.0环境变量
(5)移植相关库文件至开发板
首先准备一个文件系统,根据友善提供的文档制作了一个文件系统,路径为/opt/rootfs,其中rootfs就是根文件系统。
把编译生成的库文件及配置文件复制至开发板上,用NFS方式挂载文件系统,把目标库文件等下载到开发板。
需移植到开发板的文件如图4-5所示:
图4-5需移植到开发板的文件
移植如上文件到开发板后,编辑开发板/etc/profile,用来在开发板上设置环境变量,具体的环境变量如图4-6所示:
图4-6移植Qt/E应设置的环境变量
设置触摸屏的配置文件ts.conf
把#module_rawcollie前面的“#”号去掉,然后把该行移至行首,最后配置文件如图4-7所示:
图4-7触摸屏配置文件
(6)验证tslib是否移植成功.
在开发板终端下执行触摸较正程序:
在终端执行./ts_calibrate
运行该程序主要是校正触摸屏,运行ts_calibrate后,屏幕将出现五点校正画面,依次点击五点后,将生成触摸屏校正数据文件/etc/pointercal.
在开发板终端下执行触摸屏拖曳测试程序:
在终端执行./ts_test
运行后屏幕出现drag,draw依次选择后进行测试,同时终端下出现拖曳后的取点数据
(7)验证QT4.5.0是否移植成功
在宿主机上编译好Qt的例子程序,下载到开发板下并执行:
#./application–qws–fontunifont
如能正常显示,QT4.5.0移植成功。
4.2交叉编译环境的搭建
(1)配置minicom
在宿主机RedhatLinux5.0下新建终端,在终端命令提示符后输入minicom-s,回车,然后按照提示设置波特率115200,8位数据,1位停止位,无控制流,保存退出。
(2)TFTP服务的配置
在终端中运行setup->
systemservice->
tftp增加TFTP服务,并去掉ipchains和iptables两项,然后在Firewallconfiguration,选中nofirewall,保存退出,执行servicexinetdrestart启动TFTP服务。
(3)NFS服务器的配置
NFS,增加NFS服务,然后编辑文件exports,添加与目标机共享的目录,并设置目标机对目录的访问权限,重新启动NFS服务。
(4)Linux内核移植
通过并口,宿主机向目标开发板的Flash烧写引导程序vivi,烧写完毕后通过TFTP服务把经过裁剪的Linux内核镜像文件以及根文件系统下载到目标板的RAM中,然后由dnw完成内核及根文件系统从内存到Flash的烧写。
最后需要在宿主机安装主编译器Arm-linux-gcc,用来交叉编译应用程序。
4.3输入法设计
4.3.1输入法的原理
Qt/E是C/S结构,在服务端负责监听系统消息,比如:
keyboard和mouse消息,而中文输入法是一个全局性的模块,所以在Qt/E中,把中文输入法的设计放在了服务层。
输入法是属于服务层的一部分。
QWSInputMethod是Qt/E的一个类,其是中文输入法的基类,在QWSInputMethod这个基类中定义了一些函数用以支持输入法的程序的设计,本文从此基类中继承出了一个中文输入法的类,在该类中处理keyboard和mouse事件,把接收到的keyboard事件按照用户所需要输入的汉字的拼音,从字库中查找出之对应的汉字,词组,或者是一个汉语短语,发送给当前的显示窗口,或者把用户最后选择的汉字、短语或词组发送到当前的显示窗口。
需定义一个输入法窗口来显示用户当前的输入。
字符,汉字,英文的输入一般分为三大步骤:
(1)开始准备输入
当用户在软键盘上按下第一个keyboard按键时,输入法会自动创建出输入法的上下文,输入法上下文包含keyboard输入字符。
(2)选择编辑
当有任何一个新的keyboard按键被按下的时候,输入法就会主动尝试着去创建与keyboard输入相对应的中文字符,英文字符和数字等等,此时,激活了中文输入法的上下文,用户可以自由的在中文输入法的上下文中前后移动光标。
(3)输入完成
当用户认为输入已经完成的时,用户会选择以某种方式来选择最终的字符串,通常是使用keyboard按键,或者mouse点击,用户最终所选择的字符串会被发送到当前的编辑窗口。
4.3.2输入法流程图
本输入法的流程是:
用户输入,软键盘得到响应,系统判断是否处于中文输入状态,是:
进入中文输入流程,否:
进入英文输入流程,具体流程图如图4-8所示:
图4-8输入法流程图
4.3.3关键模块介绍
(1)中文输入模块
中文输入模块实现了中文输入功能,用户选择了中文输入状态,点击软键盘,输入拼音,通过相应的编码,查找到字库中与之对应的汉字,显示在编辑框中,用户选择所需输入的汉字,中文输入完成。
系统中实现中文输入的接口为:
boolGetKey(int,int)。
其中的关键代码为:
if(k==Qt:
:
Key_Space){
if(m_pinyin_frame->
m_ime_info.candidates_on_page>
0)
{
k='
1'
。
gotocommit。
}
else{
bKeyProcessed=false。
}
elseif(k==Qt:
Key_Right||k==Qt:
Key_Down){
if(!
m_pinyin_frame->
next_page()){
Key_Left||k==Qt:
Key_Up){
prev_page()){
elseif(u==8&
&
k==Qt:
Key_Backspace){
m_ime_info.pinyin.size()>
0){
printf("
Key_Backspacehere\n"
)。
String:
iteratorpos=m_pinyin_frame->
m_ime_info.pinyin.end()-1。
m_pinyin_frame->
m_ime_i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- QtE 嵌入式 中文 输入法 设计 实现
![提示](https://static.bdocx.com/images/bang_tan.gif)