QtE的嵌入式中文输入法的设计与实现

上传人:仙*** 文档编号:97295601 上传时间:2022-05-27 格式:DOC 页数:23 大小:131.50KB
返回 下载 相关 举报
QtE的嵌入式中文输入法的设计与实现_第1页
第1页 / 共23页
QtE的嵌入式中文输入法的设计与实现_第2页
第2页 / 共23页
QtE的嵌入式中文输入法的设计与实现_第3页
第3页 / 共23页
点击查看更多>>
资源描述
封面作者: PanHongliang仅供个人学习摘要随着嵌入式系统的迅猛发展,嵌入式系统广泛地运用于各个领域中,如:智能家居、手持设备,工业系统等诸多领域。嵌入式系统的资源有限,对资源十分敏感,因此要求嵌入式 GUI 必须占用十分少的系统资源,而目前应用于嵌入式系统中的中文输 入法都占用很多的资源,导致系统运行缓慢,很是影响用户的体验。因此,目前国内 外的用户都殷切盼望出现一种系统级的、占用系统资源少的、轻量级的嵌入式中文输 入法。诺基亚公司开发了一款面向嵌入式系统的Qt 版本:Qt/E,是当前嵌入式 GUI 开发者比较青睐的开发工具,广泛运用于手持电子设备的开发中。然而,目前国内外在 Qt/E 平台下开发的嵌入式中文输入法,是基于X lib 库的,占用很多的系统资源,不是非常人性化。基于上述背景,本文开发了一种轻量级的中文输入法,该中文输入法是基于 Qt/E 平台的。该输入法具有良好的移植性和超强的扩展性的,然而它没有增加系统的开 销,使用户可以方便,快捷地输入中文汉字、英文字母和各种标点符号。本文首先阐述了开发嵌入式中文输入法的意义以及研究现状,接着介绍了需要用 到的几个相关的技术,最后介绍了软件的设计和实现的各个阶段的主要工作和相关文 档。关键词:嵌入式;Qt/E;中文输入法AbstractWith the rapid development of embedded system, the embedded system is widely used inmany fields, such as, intelligent household, handheld devices, industrial system, etc. Embeddedsystem limited resources, is very sensitive to resources, therefore, ask embedded GUI mustoccupy little system resources, and currently applied to the Chinese input method embeddedsystem is take a lot of resources, cause the system running slowly, very user experience isinfluence. Therefore, the users at home and abroad are anxious appear a system level, occupiessystem resources less, lightweight embedded Chinese input method. Nokia has developed aparagraph of embedded system oriented version: Qt/E series, is the current embedded GUIdevelopers prefer development tools, widely used in the development of portable electronics.However, both at home and abroad in Qt/E the workbench development embedded Chineseinput 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 Chinese input method, thisChinese input method is based on the Qt/E platform. The input method has good portability andstrong expansibility, but it has not increased system overhead, the user can convenient, quick toenter Chinese characters, English letters and various punctuation.This article elaboratesthe significance of developing embeddedChinese input method andthe research status, then introduces the need to use the technology of several related, and finallyintroduces software design and implementation of the main stages working and relateddocuments.Keywords :embedded ; qt/e ; chinese input metho目录1 绪论 21.1 课题研究的意义 21.2 嵌入式中文输入法的研究现状 21.3 课题研究内容及目标 3 1.3.1 课题研究的内容 31.3.2 课题研究的目标 31.3.3 开发平台的选择 32 相关技术概述 32.1 交叉编译简介 32.2QT简介 42.3 QT/E 简介 42.4 VIM简介 53 系统需求分析 53.1 需求分析的目的 53.2 需求分析的地位与作用 63.3 系统应该满足的功能 64 系统设计 64.1 搭建 QT/E 开发环境 64.2 交叉编译环境的搭建 84.3 输入法设计 94.3.1 输入法的原理 94.3.2 输入法流程图 94.3.3 关键模块介绍 105 系统安装及演示 165.1 系统安装 165.2 系统运行截图 175.2.1 输入法悬浮窗截图 175.2.2 中文输入截图 175.2.3 小写英文输入截图 175.2.4 大写英文输入截图 176 结论 18参考文献 18 致谢错误!未定义书签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 平台实际上是 Intel x86 体系结构和 Windows for x86 操作系统的统称;而 x86 Linux平台实际上是 Intel x86 体系结 构和 Linux for x86 操作系统的简称。嵌入式设备一般对系统资源比较敏感,不能运行软件的开发环境,只执行 程序,嵌入式设备叫做目标机;一般的 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, 全称为 Qt for Embedded,是 Qt 面向嵌入式开发的一个版本, 通常所 说的 Qt 是 Qt forx11 Linux,是 Qt 面向 pc 机的一个版本,Qt for x11 Linux 和 Qt for Embedded Linux 最大的差别,在于二者要显示界面的内容,所依赖的显 示基础不同,这导致了两者在体系结构上的根本差异。Qt for x11 L i n u x :底层的显示技术构建在 Window 系统之上,完全依赖于 Windows 系统,在下层调用了 X Lib 的系统方法来显示界面上的图像。Qt for embedd linux :没有构建在 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 是 Vi IMitation (模 拟)的简称。 1991 年 Vim 1.14 版被 Fred Fish Disk #591 这个 Amiga 用的免 费软体集所收录。 1992 年 1.22 版本的 Vim 被移植到了 UNIX 和 MS-DOS上。从此, Vim 的全名就正式变成 Vi Improved。Vim 的发展很迅速, 在这之后,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 月发布的 Vim7.2,该版本合并了 Vim 7.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.bz2Qt-x11 源码包: qt-x11-opensource-src-4.5.0.tar.bz2触摸屏源码包: tslib-11.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-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 表”示将使用触摸屏。编译完成后,安装时,最关键的步骤还是设置环境变量具体的环境变量如图 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_raw collie 前面的 “”号去掉, 然后把该行移至行首, 最后配置 文件如图 4-7所示:图 4-7 触摸屏配置文件(6) 验证 tslib 是否移植成功 . 在开发板终端下执行触摸较正程序:在终端执行 ./ts_calibrate运行该程序主要是校正触摸屏,运行 ts_calibrate 后,屏幕将出现五点校正 画面,依次点击五点后,将生成触摸屏校正数据文件 /etc/pointercal.在开发板终端下执行触摸屏拖曳测试程序:在终端执行 ./ts_test运行后屏幕出现 drag,draw 依次选择后进行测试,同时终端下出现拖曳 后的取点数据(7) 验证 QT4.5.0 是否移植成功在宿主机上编译好 Qt 的例子程序,下载到开发板下并执行:#./application -qws -ontunifont 如能正常显示,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 con figuration,选中 no firewall,保存退出, 执行 service xinetd restart启动 TFTP 服务。(3) NFS 服务器的配置在终端中运行 setup-systemservice-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)中文输入模块 中文输入模块实现了中文输入功能,用户选择了中文输入状态,点击软键盘,输入拼音,通过相应的编码,查找到字库中与之对应的汉字,显示在编辑 框中,用户选择所需输入的汉字,中文输入完成。系统中实现中文输入的接口为:bool GetKey(int,int) 。其中的关键代码为:if(k = Qt:Key_Space)if(m_pinyin_frame-m_ime_info.candidates_on_page0)k=1。goto commit。elsebKeyProcessed=fals。else if(k = Qt:Key_Right|k = Qt:Key_Down)if(!m_pinyin_frame-next_page() bKeyProcessed=fals。else if(k = Qt:Key_Left|k = Qt:Key_Up)if(!m_pinyin_frame-prev_page()bKeyProcessed=fals。else if( u = 8 & k =Qt:Key_Backspace) if(m_pinyin_frame-m_ime_info.pinyin.size()0) printf(Key_Backspaceheren)。 String:iteratorpos=m_pinyin_frame-m_ime_info.pinyin.end()-1 。m_pinyin_frame-m_ime_info.pinyin.erase(pos)。 m_pinyin_frame-search(。) bUpdate=true。(2)英文输入模块 英文输入模块实现了英文输入功能,用户选择了英文输入模式,点击软键盘,输入字母,系统发送字符到输入框,英文输入完成。系统中实现英文输入的接口为: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(。)(3)输入窗口界面实现 输入窗口界面由软键盘,中英文输入法的切换按键,显示拼音的输入框, 显示汉语字符的显示框组成。软键盘要实现,汉语拼音,大写英文,小写英文,常用标点符号的输入, 因此,软键盘的体积比较大,而一般手持设备的显示屏都比较小,基于此,需 要一键多用,来节省软键盘的空间,把按键上需要显示的文本写在一个 XML 文档中,通过读取该文档来显示按键上的文本:例如: ,3 键对应 序号为 n r=”17”,初始化时 PushButton 3 键 text 设置为“ 3”,当按下“shift ”时,text 设置为“ #”0软键盘界面如图 4-9 所示:图 4-9 软键盘界面因为没有桌面管理系统,本输入法设计了一个浮动窗,用于打开软键盘和 中英文输入切换,如图 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.height() 。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 size unsigned int width = 160。 the first row - pinyin inputedQFontMetrics metric=painter.fontMetrics()。 QRect rect =metric.boundingRect(QChar(ZHONG)。 int x=PINYIN_X 。 int y=PINYIN_Y 。painter.drawText(x,rect.height(),QChar(m_bEnglishMode?YING:ZHONG)。QPen 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 which 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() 。 intX=x+rect.width()+7 。int Y=rect.height() 。if(m_bMakingPhrase)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:fromUtf8(MAKEPHRASE_CLOSE) 。 painter.setPen(penText。)painter.drawText(X,Y,s)。temp = metric.boundingRect(s)。 X+=temp.width()+2 。(4)输入法安装卸载功能的实现 设计开发输入法,最关键的就是能具有安装功能,这样系统中才会有输入 法模块,输入才能工作,实现该功能的接口为:Void XInputMethod:installInputMethod() ; 此接口中,调用 setCurrentInputMethod 函数为当前的设备安装输入法模 块, setCurrentInputMethod 函数为 Qt/E 的 QWSServer 类的一个成员函数,setCurrentlnputMethod 函数的参数设置为 NULL,就是卸载输入法模块:关键代码为:void XlnputMethod:installlnputMethod()XlnputMethod* pim = instance()。if (pim)QWSServer:setCurrentlnputMethod(pim)。void XlnputMethod:releaselnputMethod()if (XlnputMethodPrivate:plnputMethod) QWSServer:setCurrentlnputMethod(NULL)。delete XlnputMethodPrivate:plnputMethod。 XlnputMethodPrivate:plnputMethod =NULL 。XlnputMethod* XlnputMethod:instance()if (NULL = XlnputMethodPrivate:plnputMethod)XlnputMethodPrivate:plnputMethod = new XlnputMethod()。return XlnputMethodPrivate:plnputMethod。(5)输入法键盘事件的过滤实现 实现键盘事件过滤的接口为:virtual bool filter(int unicode, int keycode, int modifiers, bool isPress, boolautoRepeat 。)在此函数中处理键盘输入,此函数的参数含义如下:uni code:Qt/E 统一使用的 keyboard 按键编码,keycode:键值,Qt/E 定义了一系列的键值与 keyboard 的键盘对应, modifiers:此参数是表 示有没 有其它的辅助 的 keyboard 按键同时 被press,isPress 此参数表示 keyboard 按键是被用户按下,还是被输入法释放,autoRepea:t 此参数表示这个 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_frame-update(。) return true。else if(unicode=65535 | unicode=8 | unicode=13 | unicode=27)if(initMod & unicode=13)initMod = false。 SendKey(unicode,keycode。) / return true。goto end。else SendKey(unicode,keycode。)if(initMod)initMod = false。return true。5系统安装及演示5.1 系统安装把输入法编译成 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 所示:图 5-1 输入法头文件截图用户开发 GUI 时,在工程的 main.cpp 函数中,必须调用if (QApplication:GuiServer = type) QPinyinImpl:installInputMethod() 。if (QApplication:GuiServer = type)QPinyinImpl:releaseInputMethod()。来安装和卸载俞入法,使用的时候,只要在主函数中,实现安装和卸载俞入法的过程就可以调用输入法在工程文件中加入 EmbeddedType 库,在 MakeFile 中添加:LIBS+=-lMurphytalkqmake 与 make 之后,需要将 EmbeddedType 文件夹中的字库文件和配置文 件下载到开发板 .在开发板根目录中的/etc 文件夹下,建立 EmbeddedType 文件夹。并将 EmbeddedType 文件夹中相应的文件复制到这个文件夹下,如图5-2:图 5-2 输入法字库和配置文件截图输入法安装完成。5.2 系统运行截图5.2.1 输入法悬浮窗截图 因为没有桌面管理系统来管理中文输入法,因此本输入法开发了一个输入法的置顶的悬浮窗,悬浮窗上显示“中”字,表示输入法处在中文输入模式, 用户可以方便,快捷的输入中文短语,中文词组,用户如想要切换到英文输入 模式,只需点击“中”,“中”会变成“英”,表示输入法进入了英文输入模 式,用户可以方便的输入英文字母。悬浮窗中部有一个小键盘的图标,此图标 是用于打开或关闭软键盘的,单击小键盘,输入法弹出软键盘,再点击小键 盘,输入法关闭小键盘。输入法悬浮窗,如图 5-3 所示。图 5-3 输入法悬浮窗5.2.2 中文输入截图用户选择中文输入模式,就可以方便地输入中文。用户点击软键盘上的按 键,输入需求的汉字对应的拼音 ,输入法根据拼音从字库中查找出与之对应的汉 字发送到当前的编辑窗口,用户在选择自己所要输入的汉字。如图5-4 所示图 5-4 中文输入5.2.3 小写英文输入截图用户选择了小写英文输入模式,用户单击按键,输入英文字母,在输入框中 显示出用户输入的字母,如图 5-5 所示图 5-5 小写英文输入5.2.4 大写英文输入截图用户选择了大写英文输入模式,用户单击按键,输入英文字母,在输入框中 显示出用户输入的字母,如图 5-6 所示图 5-6 大写英文输入6结论通过这次毕业设计,认识的到了本人的实际水平。刚准备做毕业设计时, 真的是无从下手,不知道做什么合适。在基地实训中,经常用到 mini2440 这块 板子,发现板子上并没有输入法,本人就突发奇想,准备开发一款用于板子上 的输入法。有了这一想法,就去网上搜索资料。发现网上有很多关于嵌入式输入法的 研究文档,明白了开发嵌入式输入法需要哪些技术,最关键的就是Qt/E ,以前在学校并没有学过,就买了本书自学,在学的过程中,发现了 Qt 的优点,特别 是跨平台性很强大,越来越对 Qt 感兴趣。在设计过程中,总是遇到这样或那样的问题,需要做大量的工作,花大量 的时间才能解决。为以后的工作积累了经验,增强了信心。既让我懂得了怎样 把理论应用与实际,又让我懂得了在实践遇到的问题怎样用理论去解决,它更 是自己综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力 的重要环节。这次毕业设计让我成长了很多,懂得了做任何事都要有始有终,懂得了坚 持的重要,眼前的黑暗不是黑暗。参考文献1 李亚锋,欧文盛, ARM 嵌入式 Linux 系统开发入门到精通 M ,北京:清华大学出版 社, 20072 徐英慧,基于 Qtopia 的嵌入式智能拼音输入法设计 J ,微计算机信息, 2008,24 (10):33 龙中花,廖建明,基于 Qtopia 的中文输入法设计与实现J ,成都信息工程学院学报,2004,19(4): 174倪继利,Qt 及 Linux 操作系统窗口设计M,北京:电子工业出版社,2006:12许立云,智能手机开发平台Qt 中软件盘的实现及改进J,现代电子技术,2006(2):176 韩超,魏治宇,廖文江,嵌入式 Linux 上的 c 语言编程实践 M,北京:亚嵌教育研究中心,20097成洁,卢紫毅,Linux 窗口程序设计-Qt4 精彩实例分析M,北京:清华大学出版社,20088谭浩强,C+程序设计M,北京:清华大学出版社, 20049陈晓雷,谢文,邓洁,基于Qt/E 的嵌入式 Linux 中文输入法的设计与实现 J ,郑州轻工学院学报,2009( 06)10蔡志明, 精通 Qt4 编程 (第 2 版) M ,北京:电子工业出版社,2011版权申明本文部分内容,包括文字、图片、以及设计等在网上搜集整理。版权为潘宏亮个人所有This article in eludes some parts, in cludi ng text,pictures, and desig n. Copyright is Pan Hon glia ngs pers onal own ership.用户可将本文的内容或服务用于个人学习、研究或欣赏,以及 其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关 法律的规定,不得侵犯本网站及相关权利人的合法权利。除此以 外,将本文任何内容或服务用于其他用途时,须征得本人及相关权 利人的书面许可,并支付报酬。Users may use the contents or services of thisarticle for pers onal study, research or appreciati on, and other non-commercial ornon-profit purposes, but at the same time, they shall abide by the provisions ofcopyright law and other releva nt laws, and shall not infringe upon the legitimaterights of this website and its releva ntobligees. In addition, when any content or service of thisarticle is used for other purposes, written permission and remun erati on shall beobta ined from the pers on concerned and the releva nt obligee.转载或引用本文内容必须是以新闻性或资料性公共免费信息为 使用目的的合理、善意引用,不得对本文内容原意进行曲解、修 改,并自负版权等法律责任。Reproducti on or quotatio n of the content of thisarticle must be reas on able and good-faith citati on for the use of n ews or informative public free in formati on .It shall not misi nterpret or modify the orig inalinten ti on of the content of this article, and shall bear legal liability such ascopyright.
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!