版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、. . . . I / 29毕业设计论文毕业设计论文基于基于 Qt/EQt/E 的嵌入式中文输入法的设计与实现的嵌入式中文输入法的设计与实现毕业设计(论文)原创性声明和使用授权说明毕业设计(论文)原创性声明和使用授权说明原创性声明原创性声明本人重承诺:所呈交的毕业设计(论文) ,是我个人在指导教师的指导下进行的研究工作与取得的成果。尽我所知,除文中特别加以标注和致的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得与其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了意。作 者 签 名:日 期:指导教师签名:
2、日期:使用授权说明使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利. . . . II / 29为目的前提下,学校可以公布论文的部分或全部容。作者签名: 日 期:摘 要随着嵌入式系统的迅猛发展,嵌入式系统广泛地运用于各个领域中,如:智能家居、手持设备,工业系统等诸多领域。嵌入式系统的资源有限,对资源十分敏感,因此要求嵌入式 GUI 必须占用十分少的系统资源,而目前应用于嵌入式系统中
3、的中文输入法都占用很多的资源,导致系统运行缓慢,很是影响用户的体验。因此,目前国外的用户都殷切盼望出现一种系统级的、占用系统资源少的、轻量级的嵌入式中文输入法。诺基亚公司开发了一款面向嵌入式系统的 Qt 版本:Qt/E,是当前嵌入式 GUI 开发者比较青睐的开发工具,广泛运用于手持电子设备的开发中。然而,目前国外在 Qt/E平台下开发的嵌入式中文输入法,是基于 X lib 库的,占用很多的系统资源,不是非常人性化。基于上述背景,本文开发了一种轻量级的中文输入法,该中文输入法是基于 Qt/E平台的。该输入法具有良好的移植性和超强的扩展性的,然而它没有增加系统的开销,使用户可以方便,快捷地输入中文
4、汉字、英文字母和各种标点符号。本文首先阐述了开发嵌入式中文输入法的意义以与研究现状,接着介绍了需要用到的几个相关的技术,最后介绍了软件的设计和实现的各个阶段的主要工作和相关文档。关键词:嵌入式;Qt/E;中文输入法. . . . III / 29AbstractAbstractWith the rapid development of embedded system, the embedded system is widely used in many fields, such as, intelligent household, handheld devices, industrial sy
5、stem, etc. Embedded system limited resources, is very sensitive to resources, therefore, ask embedded GUI must occupy little system resources, and currently applied to the Chinese input method embedded system is take a lot of resources, cause the system running slowly, very user experience is influe
6、nce. Therefore, the users at home and abroad are anxious appear a system level, occupies system resources less, lightweight embedded Chinese input method. Nokia has developed a paragraph of embedded system oriented version: Qt/E series, is the current embedded GUI developers prefer development tools
7、, widely used in the development of portable electronics. However, both at home and abroad in Qt/E the workbench development embedded Chinese input method, is based on the X the lib library, take a lot of system resources, not very humane. Based on the background, this paper developed a lightweight
8、Chinese input method, this Chinese input method is based on the Qt/E platform. The input method has good portability and strong expansibility, but it has not increased system overhead, the user can convenient, quick to enter Chinese characters, English letters and various punctuation. This article e
9、laborates the significance of developing embedded Chinese input method and the research status, then introduces the need to use the technology of several related, and finally introduces software design and implementation of the main stages working and related documents.KeyKey wordswords : : embedded
10、;qt/e;chinese input metho. . . . I / 29目 录1 绪论 11.1 课题研究的意义 11.2 嵌入式中文输入法的研究现状 11.3 课题研究容与目标 21.3.1 课题研究的容 21.3.2 课题研究的目标 21.3.3 开发平台的选择 22 相关技术概述 32.1 交叉编译简介 32.2 QT简介 32.3 QT/E 简介 32.4 VIM简介 43 系统需求分析 63.1 需求分析的目的 63.2 需求分析的地位与作用 63.3 系统应该满足的功能 64 系统设计 84.1 搭建 QT/E 开发环境 84.2 交叉编译环境的搭建 114.3 输入法设计
11、114.3.1 输入法的原理 124.3.2 输入法流程图 124.3.3 关键模块介绍 135 系统安装与演示 205.1 系统安装 205.2 系统运行截图 215.2.1 输入法悬浮窗截图 215.2.2 中文输入截图 225.2.3 小写英文输入截图 235.2.4 大写英文输入截图 246 结论 26参考文献 27致 28. . . . 1 / 291 绪论1.1 课题研究的意义(1)嵌入式产业快速的发展当今社会,嵌入式产业的高速发展,使嵌入式产品广泛运用于各个领域中,如:智能家电,车载 GPS,手持设备,等等领域,嵌入式产品已经成为人们生活中离不开的一部分嵌入式系统没有一个明确的定
12、义,目前业专家学者一致比较认可的定义是:嵌入式系统是指以应用为中心,以计算机技术为基础,软硬件可裁剪,适应于应用系统对功能可靠性成本体积功耗等有严格要求的专用计算机系统从定义可知,嵌入式系统也是一种计算机系统,是针对某一应用的专用计算机系统,嵌入式系统可以定制,因此,嵌入式系统的发展很快。(2)输入法在人机交互中必不可少GUI 是人机交互不可缺少的部分,一个产品 GUI 的好坏往往决定了这个产品的优劣,而嵌入式 GUI 具有下面几个方面的基本要求:轻型占用资源少高性能高可靠性便于移植可配置等特点一个良好的 GUI 肯定要有一款人性化的输入法嵌入式设备的发展趋势中,重要的一点是要低功耗,尽可能的
13、减少系统的开销,因此嵌入式设备的输入法也需要在保持功能的前提下,将系统开销降低最低。Qt 的跨平台性非常良好,目前,大部分嵌入式 GUI 用 Qt 开发的。1.2 嵌入式中文输入法的研究现状嵌入式的迅猛发展,目前,在手持设备的移动终端中,广泛采用以液晶触摸显示屏实现的人性化的人机交互式 GUI。人机交互 GUI,在不同应用领域的场合,对人机GUI 的要求也不尽一样,一些情况下,只要求显示和选择一些简单的结果和参数,而在大部分移动信息终端中,要求字符的输入,有些智能终端中不仅要求有英文,数字的输入,更需要中文汉字的输入。目前国外的嵌入式中文输入法,都是在 Qt/E 平台下应用和开发的,在这平台下
14、应用的,主要有两种嵌入式中文输入法:(1)其中一种输入法是移植一般 PC 机 Windows 系统下,现有的中文输入法,该输入法是基于 Qt-X11 的,移植了该中文输入法到嵌入式设备,但该输入法需要Windows 系统下的 Xlib 库的支持,这会导致系统需要很大的系统资源,很是影响系统的运行效率。(2)另外一种输入法是使用了 Qt/E 平台自带插件的方法,但该输入法需要一个桌. . . . 2 / 29面系统来管理该输入法,为了管理该输入法,往往移植了 Qtopia 这个 Qt/E 下的桌面系统来管理该嵌入式中文输入法,但是,一般的手持设备是不需要桌面管理系统的,该嵌入式中文输入法给这类设
15、备带来了不必要的额外的开销,造成了系统资源的严重浪费。1.3 课题研究容与目标1.3.1 课题研究的容本课题主要讨论了一种基于 Qt/E 的嵌入式中文拼音输入法的研究与实现的方法。课题的主要研究的容是:Qt/E 开发环境的搭建,嵌入式现状的分析,交叉编译环境的搭建,Qt/E 体系结构的研究,中文输入法的实现,输入法安装到目标板的实现。1.3.2 课题研究的目标针对以上情况,决定组建一个界面友好,功能完善的基于 Qt/E 嵌入式中文拼音输入法,该输入法可以实现中英输入的切换,实现中文,英文,数字与常用标点符号的输入,输入法最大限度地实现了易移植性和易操作性。输入法运行稳定、安全可靠。1.3.3
16、开发平台的选择本系统将在 Linux 系统里,用 QtDesigner4 作为界面设计工具,Vim 作为开发环境,arm-linux-gcc-4.4.3 作为交叉编译器,Qt 为开发语言,运行环境为 Qt/E。具体技术将在下一章中介绍。2 相关技术概述2.1 交叉编译简介交叉编译,通俗的讲就是在一个平台上生成另一个平台上的可执行的代码。所谓的平台,实际上包含两个概念:体系结构、操作系统。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。举例来说,常说的 x86 Windows 平台实际上是 Intel x86 体系结构和 Windows for x86 操
17、作系统的统称;而 x86 Linux 平台实际上是 Intel x86 体系结构和 Linux for x86 操作系统的简称。嵌入式设备一般对系统资源比较敏感,不能运行软件的开发环境,只执行程序,嵌入式设备叫做目标机;一般的 pc 机上运行开发环境和编译器,pc 机叫做宿主机。在宿主机平台上开发程序,并在这个平台上运行交叉编译器,编译的程序;而由交叉编译器生成的程序将在目标平台上运行。. . . . 3 / 29伴随着以计算机技术、通讯技术为主的信息技术的飞速发展和互联网的广泛应用,计算机,通讯,消费电子,三者合一将成为必然趋势。信息家电,手持设备,移动设备等嵌入式产品的迅速发展,使得嵌入式
18、软件开发再度成为一个研究热点。 由于嵌入式设备的性能局限,往往不能通过本机编译得到所需软件的可执行程序。因此,以Linux 为主机操作系统,搭配一个交叉编译系统,为嵌入式设备生成可执行程序已成为现在日益流行的编译嵌入式软件的解决方案。而开放源码的编译器 GCC,经过多年的发展,已能支持几乎所有知名厂商的处理器,是嵌入式软件开发中理想的交叉编译器。2.2Qt 简介Qt 是诺基亚公司开发的一个跨平台的 C+图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt 是完全面向对象的,最有很强的扩展性,并且允许真正的组件编程。从 1996 年,Qt 进入商业领域,它
19、已经成为全世界围数千种成功的应用程序的基础。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 机的一个版本,Qt for x11 Linux 和 Qt for Embedded Lin
20、ux 最大的差别,在于二者要显示界面的容,所依赖的显示基础不同,这导致了两者在体系结构上的根本差异。Qt for x11 Linux:底层的显示技术构建在 Window 系统之上,完全依赖于Windows 系统,在下层调用了 X Lib 的系统方法来显示界面上的图像。Qt for embedd linux:没有构建在 Window 系统之上,而是构建在了 Linux 系统下的 framebuffer 之上,把在人机 GUI 上需要展示的元素写入 framebuffer。因为在嵌入式设备上省略了 X 系统,大大节省了许多的不必要的系统开销,需要在 GUI 展示的图像,直接写入了 framebuf
21、fer,节省了系统资源,大大加快了显示速度。这是Qt/E 的最大优势。两者的体系结构差别,如图 2-1 所示:. . . . 4 / 29图 2-1 Qt/E 和 Qt/X11 体系架构对比因此,Qt/E 具有服务端层,这一层主要负责监听系统的事件,如:主要是keyboard 和 mouse 事件,移动终端输出事件,管理域,管理 top 窗口,管理光标和管理屏幕保护程序等等诸多功能。系统被触发产生的 keyboard 和 mouse 事件,首先就传给服务端层,然后服务端再根据具体的实际情况把以上事件分派给,相对应的应用程序和软件。2.4Vim 简介Vim 是 Linux 系统下最常用的文本编辑
22、器,Vim 是一个类似于 Vi 的文本编辑器,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 的发展很迅速,
23、在这之后,Vim 加入了不计其数的新功能。作为第一个里程碑的是 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
24、,该版本合并了 Vim 7.1 以来的所有修正补丁,并且加入了脚本的浮点数支持。. . . . 5 / 293 系统需求分析3.1 需求分析的目的需求分析就是要明确需求方和开发放需要开发一个什么样的产品才能满足客户的需求,即明确“需要干什么” ,不需要知道“怎么干” 。本系统要实现的是一个用于嵌入式 GUI 的中文拼音输入法,因为要适用于嵌入式平台下,因此该输入法应占用较少的系统资源,输入法界面要美观,输入要方便,中英输入法切换要方便。3.2 需求分析的地位与作用需求分析是开发软件是否成功的决定因素。软件项目多数的问题都是因为需求分析不当或者是需求分析考虑不周全而导致的。在软件需求分析的过程中
25、,导致问题的出现主要包括以下方面,包括用户的需求不明确,需要实现的功能不明确, 、需求的文档不是很完善等,都可能造成产品开发的过程中的出现很多困难。软件需求分析,虽然是软件开发整个周期的开始阶段,但也是软件开发整个周期中最为关键的一个阶段,关系到项目开发成败的一个关键步骤。3.3 系统应该满足的功能通过调查研究显示,一个良好的输入法不仅仅要使用户输入起来方便,更需要安全、可靠、高效的系统支持。本输入法的要:(1)要求具有良好的界面。(2)占用系统资源少。(3)输入方便。 本系统需要实现的功能是:中文,大小写英文,常用标点符号的输入,具有软键盘,并支持触摸屏,具体功能模块如图 3-1 所示:.
26、. . . 6 / 29图 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.b
27、z2Qt-x11 源码包:qt-x11-opensource-src-4.5.0.tar.bz2触摸屏源码包:tslib-11.4.tar.gz. . . . 7 / 29(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-2 Qt-x11-4.5.0 环境变量(4)编译安装 Qt/E4.5.0编译安装 Qt/E4.5.0 时,需设置好编译参
28、数,具体参数如图 4-3 所示:图 4-3 编译 Qt/E4.5.0 参数 “-I/home/mytslib/include -L/home/ mytslib/lib ”指明刚才编译出来触摸屏的库文件与头文件存放路径。 “-qt-mouse-tslib”表示将使用触摸屏。编译完成后,安装时,最关键的步骤还是设置环境变量具体的环境变量如图 4-4 所示:. . . . 8 / 29图 4-4Qt/E4.5.0 环境变量(5)移植相关库文件至开发板首先准备一个文件系统,根据友善提供的文档制作了一个文件系统,路径为/opt/rootfs, 其中 rootfs 就是根文件系统。把编译生成的库文件与配置
29、文件复制至开发板上,用 NFS 方式挂载文件系统,把目标库文件等下载到开发板。需移植到开发板的文件如图 4-5 所示:图 4-5 需移植到开发板的文件移植如上文件到开发板后,编辑开发板/etc/profile,用来在开发板上设置环境变量,具体的环境变量如图 4-6 所示:. . . . 9 / 29图 4-6 移植 Qt/E 应设置的环境变量设置触摸屏的配置文件 ts.conf把# module_raw collie 前面的“”号去掉,然后把该行移至行首,最后配置文件如图 4-7 所示:图 4-7 触摸屏配置文件(6)验证 tslib 是否移植成功.在开发板终端下执行触摸较正程序:在终端执行
30、./ts_calibrate运行该程序主要是校正触摸屏,运行 ts_calibrate 后,屏幕将出现五点校正画面,依次点击五点后,将生成触摸屏校正数据文件/etc/pointercal.在开发板终端下执行触摸屏拖曳测试程序:在终端执行./ts_test 运行后屏幕出现 drag,draw 依次选择后进行测试,同时终端下出现拖曳后的取点数据(7)验证 QT4.5.0 是否移植成功在宿主机上编译好 Qt 的例子程序,下载到开发板下并执行:#./application qwsfontunifont如能正常显示,QT4.5.0 移植成功。. . . . 10 / 294.2 交叉编译环境的搭建(1)
31、配置 minicom在宿主机 Redhat Linux 5.0 下新建终端,在终端命令提示符后输入 minicom-s,回车,然后按照提示设置波特率 115200,8 位数据,1 位停止位,无控制流,保存退出。(2)TFTP 服务的配置在终端中运行 setup-system service-tftp 增加 TFTP 服务,并去掉 ipchains和 iptables 两项,然后在 Firewall configuration,选中 no firewall,保存退出,执行 service xinetd restart 启动 TFTP 服务。(3)NFS 服务器的配置在终端中运行 setup-sy
32、stem service-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 结构,在服务端负责监听系统消息,比如:
33、keyboard 和 mouse 消息,而中文输入法是一个全局性的模块,所以在 Qt/E 中,把中文输入法的设计放在了服务层。输入法是属于服务层的一部分。QWSInputMethod 是 Qt/E 的一个类,其是中文输入法的基类,在 QWSInputMethod这个基类中定义了一些函数用以支持输入法的程序的设计,本文从此基类中继承出了一个中文输入法的类,在该类中处理 keyboard 和 mouse 事件,把接收到的 keyboard事件按照用户所需要输入的汉字的拼音,从字库中查找出之对应的汉字,词组,或者是一个汉语短语,发送给当前的显示窗口,或者把用户最后选择的汉字、短语或词组发送到当前的显
34、示窗口。需定义一个输入法窗口来显示用户当前的输入。字符,汉字,英文的输入一般分为三大步骤:(1)开始准备输入当用户在软键盘上按下第一个 keyboard 按键时,输入法会自动创建出输入法的. . . . 11 / 29上下文,输入法上下文包含 keyboard 输入字符。(2)选择编辑当有任何一个新的 keyboard 按键被按下的时候,输入法就会主动尝试着去创建与 keyboard 输入相对应的中文字符,英文字符和数字等等,此时,激活了中文输入法的上下文,用户可以自由的在中文输入法的上下文中前后移动光标。(3)输入完成当用户认为输入已经完成的时,用户会选择以某种方式来选择最终的字符串,通常是
35、使用 keyboard 按键,或者 mouse 点击,用户最终所选择的字符串会被发送到当前的编辑窗口。4.3.2 输入法流程图本输入法的流程是:用户输入,软键盘得到响应,系统判断是否处于中文输入状态,是:进入中文输入流程,否:进入英文输入流程,具体流程图如图 4-8 所示:图 4-8 输入法流程图4.3.3 关键模块介绍(1)中文输入模块. . . . 12 / 29中文输入模块实现了中文输入功能,用户选择了中文输入状态,点击软键盘,输入拼音,通过相应的编码,查找到字库中与之对应的汉字,显示在编辑框中,用户选择所需输入的汉字,中文输入完成。系统中实现中文输入的接口为:bool GetKey(i
36、nt,int);其中的关键代码为:if(k = Qt:Key_Space) 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() bKeyProcessed=false; else if(k = Qt:Key_Left|k = Qt:Key_Up) if(!m_pinyin_frame-prev_page() bKey
37、Processed=false; else if( u = 8 & k = Qt:Key_Backspace) if(m_pinyin_frame-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_info.pinyin.erase(pos);. . . . 13 / 29 m_pinyin_frame-search(); bUpdate=true; (2)英文输入
38、模块英文输入模块实现了英文输入功能,用户选择了英文输入模式,点击软键盘,输入字母,系统发送字符到输入框,英文输入完成。系统中实现英文输入的接口为:bool SendKey(int u , int c);关键代码为:QString result = QString(QChar(u); sendCommitString(result); if (m_pinyin_frame-isVisible() m_pinyin_frame-releaseKeyboard(); m_pinyin_frame-resetState(); m_pinyin_frame-m_engine.save_table();
39、(3)输入窗口界面实现输入窗口界面由软键盘,中英文输入法的切换按键,显示拼音的输入框,显示汉语字符的显示框组成。软键盘要实现,汉语拼音,大写英文,小写英文,常用标点符号的输入,因此,软键盘的体积比较大,而一般手持设备的显示屏都比较小,基于此,需要一键多用,来节省软键盘的空间,把按键上需要显示的文本写在一个 XML 文档中,通过读取该文档来显示按键上的文本:例如:,3 键对应序号为 nr=”17”,初始化时 PushButton 3 键 text 设置为“3” ,当按下“shift”时,text 设置为“#” 。软键盘界面如图 4-9 所示:. . . . 14 / 29图 4-9 软键盘界面因
40、为没有桌面管理系统,本输入法设计了一个浮动窗,用于打开软键盘和中英文输入切换,如图 4-10 所示:图 4-10 浮动窗浮动窗上显示“中” ,表示输入法,处于中文输入模式,点击“中” ,切换到英文输入模式。点击键盘,输入法弹出软键盘。关键代码为:QPainter painter(this);QFontMetrics metric=painter.fontMetrics();QRect rect = metric.boundingRect(QChar(ZHONG);int width=170;printf(text metric is %d,%dn,rect.width(),rect.heigh
41、t();int x=PINYIN_X;int y=PINYIN_Y;painter.drawText(x,rect.height(),QChar(m_bEnglishMode?YING:ZHONG);QFrame:paintEvent(e);QPainter painter(this);painter.setClipRect (e-rect ();FIXME: how to get screen sizeunsigned int width = 160;the first row - pinyin inputed QFontMetrics metric=painter.fontMetrics(
42、);QRect rect = metric.boundingRect(QChar(ZHONG);int x=PINYIN_X;int y=PINYIN_Y;painter.drawText(x,rect.height(),QChar(m_bEnglishMode?YING:ZHONG);. . . . 15 / 29QPen penGray (QColor(128,128,128);QPen penWhite(QColor(255,255,255);QPen penText (QColor(0,0,0);QPen penPage (QColor(0,0,255);vertical line w
43、hich seperates chinese/english indicator with pinyin inputedpainter.setPen(penGray);painter.drawLine(x+rect.width()+2,y,x+rect.width()+2,y+rect.height();painter.setPen(penWhite);painter.drawLine(x+rect.width()+3,y,x+rect.width()+3,y+rect.height();int X=x+rect.width()+7;int Y=rect.height();if(m_bMaki
44、ngPhrase)QRect temp; QString s=QString:fromUtf8(MAKEPHRASE_OPEN);painter.setPen(penText);painter.drawText(X,Y,s);temp = metric.boundingRect(s);X+=temp.width();painter.setPen(penPage);painter.drawText(X,Y,m_ime_info.phrase);temp = metric.boundingRect(m_ime_info.phrase);X+=temp.width();s=QString:fromU
45、tf8(MAKEPHRASE_CLOSE);painter.setPen(penText);painter.drawText(X,Y,s);temp = metric.boundingRect(s);X+=temp.width()+2;(4)输入法安装卸载功能的实现. . . . 16 / 29设计开发输入法,最关键的就是能具有安装功能,这样系统中才会有输入法模块,输入才能工作,实现该功能的接口为:Void XInputMethod:installInputMethod();此接口中,调用 setCurrentInputMethod 函数为当前的设备安装输入法模块,setCurrentInpu
46、tMethod 函数为 Qt/E 的 QWSServer 类的一个成员函数,setCurrentInputMethod 函数的参数设置为 NULL,就是卸载输入法模块:关键代码为:void XInputMethod:installInputMethod()XInputMethod* pim = instance(); if (pim) QWSServer:setCurrentInputMethod(pim); void XInputMethod:releaseInputMethod()if (XInputMethodPrivate:pInputMethod) QWSServer:setCurr
47、entInputMethod(NULL); delete XInputMethodPrivate:pInputMethod; XInputMethodPrivate:pInputMethod = NULL; XInputMethod* XInputMethod:instance()if (NULL = XInputMethodPrivate:pInputMethod) XInputMethodPrivate:pInputMethod = new XInputMethod(); . . . . 17 / 29 return XInputMethodPrivate:pInputMethod;(5)
48、输入法键盘事件的过滤实现实现键盘事件过滤的接口为:virtual bool filter(int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat );在此函数中处理键盘输入,此函数的参数含义如下:unicode:Qt/E 统一使用的 keyboard 按键编码,keycode: 键值,Qt/E 定义了一系列的键值与 keyboard 的键盘对应,modifiers: 此参数是表示有没有其它的辅助的 keyboard 按键同时被 press,isPress: 此参数表示 keyboard 按键是被用户按下,还是
49、被输入法释放,autoRepeat: 此参数表示这个 keyboard 按键事件是不是自动重复产生的事件函数的返回值为真,表示当前的 keyboard 按键事件已经被 Qt/E 处理了,不需要输入法继续分发该事件,返回值为假,表示该 keyboard 按键事件没有被 Qt/E 处理,继续分发该 keyboard 按键事件。关键代码为:if (isWork & isPress) if(m_pinyin_frame-m_bEnglishMode) if(keycode = Qt:Key_Tab) m_pinyin_frame-m_bEnglishMode = false; m_pinyin
50、_frame-update(); return true; else if(unicode=65535 | unicode=8 | unicode=13 | unicode=27) if(initMod & unicode=13) initMod = false; SendKey(unicode,keycode);/. . . . 18 / 29 return true; goto end; else SendKey(unicode,keycode); if(initMod) initMod = false; return true; 5 系统安装与演示5.1 系统安装把输入法编译成
51、QT 库文件,方便在项目中调用。在输入法的主文件中,直接 make ,编译生成四个 lib 文件libMurphytalk.solibMurphytalk.so.1libMurphytalk.so.1.0libMurphytalk.so.1.0.0然后把以上库文件下载至开发板的 Qt/E 的 lib 目录下。将这四个文件,放到 QTE 的 lib 文件夹下,然后在 QTE 的 include 文件夹下,建立文件夹 EmbeddedType,并将相应的头文件依照下图的形式,放入此文件夹中,如此在 QTE 库中就有了 EmbeddedType 输入法,如图 5-1 所示:. . . . 19 /
52、29图 5-1 输入法头文件截图用户开发 GUI 时,在项目的 main.cpp 函数中,必须调用if (QApplication:GuiServer = type) QPinyinImpl:installInputMethod();if (QApplication:GuiServer = type) QPinyinImpl:releaseInputMethod();来安装和卸载输入法,使用的时候,只要在主函数中,实现安装和卸载输入法的过程就可以调用输入法。 在项目文件中加入 EmbeddedType 库,在 MakeFile 中添加:LIBS+=-lMurphytalkqmake 与 mak
53、e 之后,需要将 EmbeddedType 文件夹中的字库文件和配置文件下载到开发板.在开发板根目录中的/etc 文件夹下,建立 EmbeddedType 文件夹。并将 EmbeddedType 文件夹中相应的文件复制到这个文件夹下,如图 5-2:图 5-2 输入法字库和配置文件截图输入法安装完成。5.2 系统运行截图. . . . 20 / 295.2.1 输入法悬浮窗截图因为没有桌面管理系统来管理中文输入法,因此本输入法开发了一个输入法的置顶的悬浮窗,悬浮窗上显示“中”字,表示输入法处在中文输入模式,用户可以方便,快捷的输入中文短语,中文词组,用户如想要切换到英文输入模式,只需点击“中”
54、,“中”会变成“英” ,表示输入法进入了英文输入模式,用户可以方便的输入英文字母。悬浮窗中部有一个小键盘的图标,此图标是用于打开或关闭软键盘的,单击小键盘,输入法弹出软键盘,再点击小键盘,输入法关闭小键盘。输入法悬浮窗,如图5-3 所示。图 5-3 输入法悬浮窗5.2.2 中文输入截图 用户选择中文输入模式,就可以方便地输入中文。用户点击软键盘上的按键,输入需求的汉字对应的拼音,输入法根据拼音从字库中查找出与之对应的汉字发送到当前的编辑窗口,用户在选择自己所要输入的汉字。如图 5-4 所示. . . . 21 / 29图 5-4 中文输入5.2.3 小写英文输入截图 用户选择了小写英文输入模式
55、,用户单击按键,输入英文字母,在输入框中显示出用户输入的字母,如图 5-5 所示. . . . 22 / 29图 5-5 小写英文输入5.2.4 大写英文输入截图 用户选择了大写英文输入模式,用户单击按键,输入英文字母,在输入框中显示出用户输入的字母,如图 5-6 所示. . . . 23 / 29图 5-6 大写英文输入6 结论通过这次毕业设计,认识的到了本人的实际水平。刚准备做毕业设计时,真的是无从下手,不知道做什么合适。在基地实训中,经常用到 mini2440 这块板子,发现板子上并没有输入法,本人就突发奇想,准备开发一款用于板子上的输入法。有了这一想法,就去网上搜索资料。发现网上有很多关于嵌入式输入法的研究文档,明白了开发嵌入式输入法需要哪些技术,最关键的就是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑防水安全质量协议
- 航空物流货车司机聘用合同模板
- 建筑公司司机招聘合同
- 二手房买卖助手经纪合同
- 城市社会福利设施建设管理办法
- 汽车销售区道路维修临时协议
- 学校教育保洁员招聘合同
- 证券公司合同
- 2024人工智能在金融领域应用合同
- 酒店股权投资协议
- 江苏省南通市2024-2025学年七年级上学期期中英语试卷(含答案解析)
- 2022年甘肃省公务员录用考试《行测》真题及答案解析
- 排球正面上手发球课件
- 施工现场仓库、危化品管理制度
- 税收的经济效应课件
- GB/T 16915.1-2024家用和类似用途固定式电气装置的开关第1部分:通用要求
- 2025届高考语文一轮复习:小说物象含义及作用
- 湖北省襄阳市2023-2024学年六年级上学期英语期中试卷(含答案)
- 山东省潍坊市2023-2024学年度高二上学期期中考试化学试题(带答案)
- 2025年考研政治政治理论时政热点知识测试题库及答案(共三套)
- 大学生生涯发展展示 (修改)
评论
0/150
提交评论