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