![]() Computer Science and Application 计算机科学与应用, 2013, 3, 6-10 http://dx.doi.org/10.12677/csa.2013.31002 Published Online February 2013 (http://www.hanspub.org/journal/csa.html) Design and Implement of Embedded Soft Keyboard and Chinese Pinyin Input Method on QT_E JingWu, Hua Ye, Zhiyong Lin School of Automation, Southeast University, Nanjing Email: wujingseu@qq.com Received: Nov. 2nd, 2012; revised: Nov. 25th, 2012; accepted: Dec. 14th, 2012 Abstract: Video surveillance terminal is mainly used for video acquisition and display, audio collection and playback, audio and video encoding, storage transmission, reception of GPS signals and alarm functions. In order to complete the various parameters and character configuration of the embedded video surveillance terminal, it is needed to implement embedded soft keyboard and corresponding Chinese input method on the scene LCD. Based on QT_E software devel- opment platform, this paper takes signal slot mechanism and layout management technology to complete soft keyboard layout and design of the soft keyboard, and also takes the txt font search technology to develop Chinese Pinyin input method. The application results show the feasibility of the scheme. Keywords: QT_E; Embedded; Soft Keyboard; Pinyin Input Method 基于 QT_E 的嵌入式软键盘和中文拼音输入法的设计与实现 吴 静,叶 桦,林志勇 东南大学自动化学院,南京 Email: wujingseu@qq.com 收稿日期:2012 年11 月2日;修回日期:2012 年11 月25 日;录用日期:2012 年12 月14 日 摘 要:视频监控终端主要用于实现视频的采集显示、音频的采集播放、音视频编码存储传输、接收 GPS 信号 和报警等功能。为了方便完成嵌入式视频监控终端的各种参数和字符的配置,需要在现场液晶显示屏上实现嵌 入软键盘及相应的中文输入法。本文基于 QT_E 软件开发平台,采用信号槽机制和布局管理器技术,完成了软键 盘的布局和软键盘的设计;采用txt 字库搜索技术,实现了中文拼音输入法。应用结果表明了所用方案的可行性。 关键词:QT_E;嵌入式;软件盘;拼音输入法 1. 引言 随着嵌入式系统处理器、视频图像处理技术和移 动通信技术的不断发展,以及人们对于视频监控的需 求越来越高,嵌入式设备已经越来越广泛的应用于视 频监控当中,3G 视频监控终端就是这样一种视频监 控设备。它可以处理多达 16 路的视频图像,可以通 过3G 网络把视频数据上传到服务器,实现远程实时 监控,也可以通过现场的显示器观察各路视频。不同 的用户会有不同的需求,那么终端就需要有不同的配 置,而且常常会根据需要修改,这就要求终端设备具 有良好的人机交互界面。我们设计的 3G 视频监控终 端与其它手持嵌入式设备不同的是它没有键盘输入 或触摸屏输入,唯一的输入设备就是红外遥控器,通 过红外遥控器可以在显示器上打开一个菜单界面,在 菜单界面配置各个选项,有些选项需要输入字母、汉 字或其它字符,因此在菜单界面上需要显示一个软键 盘,同时还要实现中文输入法。 整个菜单界面通过 GUI 系统开发,嵌入式系统下 Copyright © 2013 Hanspub 6 ![]() 基于 QT_E 的嵌入式软键盘和中文拼音输入法的设计与实现 的GUI 要求轻量、占用资源少、可靠性高[1],常用的 有QT_E、Microwindows 和MiniGUI。MicroWindows 对窗口系统和图形接口方面的功能比较欠缺, MiniGUI 虽然比较成熟,但属于商业软件,相对比较 封闭,而QT_E 开源免费,功能强大,文档比较齐全 [2],综合比较最终选择 QT_E作为开发菜单界面的 GUI 系统。本文重点研究了基于 QT_E的嵌入式软键盘和 中文拼音输入法的设计与实现。 2. QT_E体系结构介绍 QT_E 是为嵌入式 Linux 优化过的 Qt版本,它完全 摒弃了底层 Xlib, 仅采FrameBuffer 作为底层图形接 口,实现的是一个轻量级的窗口系统,而在上层 QT_E 仍然保持了原来Qt 的架构,提供了和 Qt/X11 相同的 API 和工具,因此用 Qt/X11 设计的程序仍然具有很好 的移植性[2]。QT_E 的基本体系结构如图 1所示。 QT_E 体系可以分为 3层架构[3]: 1) 图形引擎和事件驱动层:这一层通过调用和直 接访问 Linux 操作系统的 frambuffer 和输入驱动设备。 2) 上层图形层:图形引擎封装了对FramBuffer 的绘图操作,是低级别的绘图层,这一层抽象出对具 体显示设备的操作接口,为上层开发和用户提供了图 形的抽象层。 3) 上层控件层:这一层通过公共抽象类 QWidget, 实现用户所需要的主要控件类。 QT_E在体系上为 C/S 结构,Server 层负责监听 系统事件,尤其是鼠标、键盘事件、屏幕输出等。系 统产生的鼠标和键盘事件首先被送到 Server 层,然后 Server 会根据具体情况发送给相应的应用程序[3]。任 何一个 QT_E 程序都可以作为系统中唯一的一个GUI Server 存在。 3. 输入法设计基本原理 基于 QT_E 的体系结构,为了设计一个系统级输 Linux操作系统 FrameBuff er 事件驱动图形引擎 Qt基本类 上层图形类 输入设备驱动 上层控件类 Figure 1. QT_E basic architecture 图1. QT_E的基本体系结构 入法,需要把输入法的设计放在Server层,作为 Server 进程运行[4]。如果当前 Server 安装了一个输入法,键 盘和鼠标消息在被派发之前先发送给输入法,输入法 会判断是否需要对事件进行处理。如果输入法处理了 事件,就不会继续分发这个事件,否则就会按照原先 的事件分发机制继续分发这个事件,也就是说输入法 会在应用程序之前接收到鼠标和键盘事件。QT_E 定 义了一个输入法基类QWSInputMethod,在这个基类 中封装了一些基本的输入法函数,这些函数作为接口 用以支持输入法程序设计[5,6],我们需要做的就是从 QWSInputMethod这个类继承出一个输入法类,在这 个类中处理鼠标和键盘事件,把接收到的键盘事件按 照输入法的编码规则转换为对应的字母、汉字或其它 字符。 QT_E 中文输入法的 C/S 模型见图 2。 QWSServer 类有一个输入法安装函数 set Current Input Method (QWSInputMethod*method),在 Qt_EServer 程序中调用set Current Input Method (my _inputMethod), 输入法就安装到Server 层[7]。 4. 软件盘的实现 4.1. 软键盘的系统设计 在菜单界面中需要输入字母,汉字和符号,因此 设计软件盘界面时将其划分为 3个界面,包括中文输 入界面、英文输入界面和符号输入界面,同一时刻软 键盘只显示一种界面,可以通过软键盘界面的“切换” 按钮实现 3种界面之间的切换。在中文输入界面下可 以通过拼音组合输出汉字,在英文输入界面下可以输 出英文大小写字母,在符号输入界面下可以输出数字 和标点符号。当焦点切换到可编辑窗口时会自动显示 软键盘,当焦点移出可编辑窗口时自动关闭软键盘。 同时可以通过软件盘界面的 del 键删除焦点可编辑窗 口里的任一字符,同时也可以通过软件盘界面的方向 键对焦点可编辑窗口里面的光标重新定位。软键盘整 键盘和 鼠标事件 服务器 QWSServer 客户端 QWSClient 输入法过滤鼠标 和键盘事件 QWS窗口列表 Figure 2. C/S model of Chinese input method 图2. 中文输入法的 C/S 模型 Copyright © 2013 Hanspub 7 ![]() 基于 QT_E 的嵌入式软键盘和中文拼音输入法的设计与实现 体的系统流程设计图,如图3。 4.2. 软键盘的界面设计 4.2.1. 软键盘界面模型的制定 软键盘界面的所有按键都由QPushButton 组成, 一共有 44 个按键。通过 QGroupBox、QHBoxLayout、 VBoxLayout 的组合实现所有按键的布局,QHBox- Layout、QVBoxLayout 会根据放在它们当中按键的个 数自动调整按键的大小。布局是按照常见全键盘的布 局设计的,只是对某些特殊按键的位置稍作修改。每 一种界面之间的布局相差不大,只是在每一个 QPushButton 上显示的字符会发生变化,实际上3种 界面共享的是同样的按键。软键盘界面的大小设计为 620 × 270。界面如图 4所示。 需要说明的是,英文输入界面和中文输入界面基 本相同,因此这里没有给出英文输入界面的图片。输 入界面里面第一行只有在中文输入界面下才会用以 显示输入的字母组合,以及拼音对应的汉字,在其它 输入界面没有作用,因为在其它界面下每一个按键输 软键盘 中文输入界面 英文输入界面符号输入界面 中文拼音输入法 软件盘事件过滤器 字符输入框 可编辑输入框获得焦点 Figure 3. Soft keyboard system design flow chart 图3. 软键盘整体的系统设计流程图 Figure 4. Chinese input interface (up) and symbol input interface (down) 图4. 中文输入界面(上)和符号输入界面(下) 入会直接 英文输 4.2.2.软键盘界面的软件实现 成四类:字符按键、 命令按键 能按键和 键按下时能够读出键 值, 上 发送到当前具有焦点的输入窗口。在 入界面下“Caps”按键用以切换英文字母的大小写。 在其它界面下按“Caps”键没有任何反应。通过软键 盘输入的字母、汉字或其它字符发送到输入窗口时会 以虚下划线的形式显示,表示这些字符正在编辑当 中,只有点击界面中“确定”按钮才会把最终确认的 字符发送到输入窗口中。如果在点击“确定”按键前 切换了输入界面,那么之前没有经过确认的输入都会 被清除。 软键盘上 44 个按键可以分 、功 状态显示按键。字符按键是指 字母、数字和其他可显示的符号按键;命令按键是指 方向按键,“确定”按键,“del”按键,“空格”按键 等;功能按键是指“切换”按键,“Caps”按键 ,“<” 按键和“>”按键,这些按键用以改变输入模式 和键 盘界面;状态显示按键是指键盘左上方和左下方的按 键,左上方的按键用以指示当前输入字母的组合,左 下方的按键用以指示当前输入法的状态,按下这些按 键没有任何意义,“CN”表示当前为中文输入,“EN” 和“en”分别表示当前英文大小写字母输入,“*/123” 表示当前为数字和符号输入。 软件部分要实现的是当有 进行相应的处理。对于功能按键的处理方法是为 每个按键的 clicked()信号建立一个对应的信号槽,将 信号软键盘 44 个按键可以分成四类:字符按键、 命令按键、功能按键和状态显示按键。字符按键是指 字母、数字和其他可显示的符号按键;命令按键是指 方向按键,“确认”按键,“del”按键,“空格”按键 等;功能按键是指“切换”按键,“Caps”按键 ,“<” 按键和“>”按键,这些按键用以改变输入模式 和键 盘界面;状态显示按键是指键盘左上方和左下方的按 键,左上方的按键用以指示当前输入字母的组合,左 下方的按键用以指示当前输入法的状态,按下些按键 没有任何意义,“CN ”表示当前为中文输入,“EN ” 和“en”分别表示当前英文大小写字母输入,“*/123” 表示当前为数字和符号输入。软件部分要实现的是当 有键按下时能够读出键值,进行相应的处理。对于功 能按键的处理方法是为每个按键的 clicked()信号建立 一个对应的信号槽,将信号和信号槽连接(connect), Copyright © 2013 Hanspub 8 ![]() 基于 QT_E 的嵌入式软键盘和中文拼音输入法的设计与实现 当按键被按下时就发射对应的 clicked()信号,然后在 对应的信号槽中做相应的处理。对于字符按键和命令 按键的处理方法是创建一个QButtonGroup ,为 QButtonGroup 的clicked(int key)信号建立一个信号 槽,然后将每一个按键都加到 QButtonGroup 当中, 在加入每一个按键时,为每一个按键分配一个对应的 Key,比如按键“a”分配“Qt::Key_A”,按键“<- ” 分配“Qt::Key_Left”,这些 key 在QT_E 中都定义为 宏个按键时,为每一个按键分配一个对应的 Key,比 如按键“a”分配“Qt::Key_A”,按键“<-”分配 “Qt::Key_Left”,这些 key在QT_E 中都定义为宏。 当有按键被按下时就会发送 QButtonGroup 的 clicked(int key)信号,其对应的信号槽(key 作为参数值 被传递到信号槽)根据 key的值判断哪个按键被按下, 将key值包装成键盘事件发送出去,在输入法键盘过 滤函数 filter()中会判断按键是字符按键还是命令按 键,如果是字符按键调用函数 send Preedit String (content)将字符发送到输入窗口,其中 content 代表要 发送的字符,如果是命令按键,则直接转发键盘事件。 整个过程可以用图 5表示。 4.3. 键盘输入转换为中文汉字的编码实现 软件盘中汉字编码原理和显示 样一个按键对 应一 4.3.1. 汉字数量巨大,不能像英文字母一 个字母,因此需要找到一种编码方法,通过已有 Figure 5. Soft keyboard software implementation flow chart 图5. 软键盘软件实现流程图 按 汉语拼音输出汉字,比 如要 库是使用 UTF-8 编码的 txt 文 件, 粑罢 耙芭 佰柏掰摆稗捭 空格,也就是 说所 输 键的某种组合方式产生需要的汉字,这就是所谓的 输入法。常用的输入法有五笔输入法、笔画输入法和 拼音输入法。现在越来越多的人习惯于使用拼音输入 法,因为它简单易用,不需要记很多规则。因此本文 选用大众化的拼音输入法。 拼音输入法就是根据汉字 输出汉字“高”,可把界面切换到中文输入界面, 分别按字母“g”“a”“o”键,形成一个字母组合“gao”, 然后程序到字库里寻找“gao”对应的汉字 ,在软 键 盘上显示出来。如果当前页没有需要的汉字,可以通 过软键盘界面上“>”按 键到 下一 页寻找。 只要 拼音 正确一定会找到需要的汉字。在字库中,所有汉字都 是通过“UTF-8”编码方式存放,找到想要的汉字后 就把该汉字对应的编码发送出去,由于应用程序支持 “UTF-8”编码,可以根据接收到的编码显示对应的 汉字,这样就实现了汉字的输入功能。需要说明的是 字库是 txt 文件,使用 QTextStream 类读入字库文件。 整个过程的如图6。 4.3.2. 汉字查找算法 本文使用的汉字字 所有的汉字根据汉语拼音归类,拼音相同的汉字 放在一起,常用的汉字排在前面,不同的拼音比较拼 音中每个字母的ASCII 码,ASCII 码小的排在前面。 比如拼音为“ba”的汉字和拼音为“bai”的汉字在字 库中会排在相邻两行,“ba”在“bai”前面。 ba 把八爸叭吧霸巴坝扒跋靶拔岜捌灞疤笆 茇菝钯魃鲅 bai白百败拜 其中“ba”和后面的汉字之间有一个 有的拼音和他们对应的汉字之间都有一个空格。 加空格的目的是以空格为标志提取后面的汉字。 现在假设从软键盘上输入字母“b”,首先计算 读入字库文件,放入QTe xtStream流中 获取输入的字母组合 到Qte xtStram 流中寻找字母组合对应的汉字 输出查找到的汉字的 UTF-8编码 键盘输入 Figure 6. Chinese character input flow chart 图6. 汉字输入流程图 Copyright © 2013 Hanspub 9 ![]() 基于 QT_E 的嵌入式软键盘和中文拼音输入法的设计与实现 Copyright © 2013 Hanspub 10 入字母的 第一行 心 思想 5. 总结 长度,假设为 ,然后从字库的length 开始寻找,取这一行最左边长度为length的字符串, 将其与输入的拼音相比较,如果相同则认为这一行就 是要查询的汉字,停止查找,在这一行以空格为标志, 将空格后面的汉字输出,否则继续查找下一行,查找 到最后一行都没有匹配的,则查找失败。根据上面的 算法,输入字母“b”,最终查找的结果是“ba”所对 应的汉字,继续输入字母“a”,现在已经输入了“ba”, 查找结果不变,如果继续输入字母“i”,现在已经输 入“bai”,那么“ba”这一行肯定不匹配了,继续到 下一行寻找,下一行为“bai”,刚好是匹配的。 上面通过具体例子阐述了汉字查找算法的核 本文详细说明了软键盘的设计过程和中文拼音 输入法的设计原理及算法实现。应用结果表明了所用 方案的可行性。虽然现在仅应用于3G 视频监控终端 菜单中,但由于 QT_E是一个跨平台的 GUI 开发环境, 因此不需要做太大的修改就可以将本文方法移植到 其它嵌入式设备当中。随着嵌入式系统的发展,会有 越来越多的嵌入式设备需要图形用户操作界面,那么 势必需要软键盘和中文输入法,因此本文的研究很有 意义。 现在中文拼音输入法暂不支持输入词语以及联 想和模糊输入功能,汉字查找算法可以结合数据库技 术进行改进以提高查找效率,这些都是以后工作中需 要进一步努力改进的。 ,下面通过流程图表示这一算法过程,如图 7。 打开字库 输入拼音 计算拼音的长度 n 取出下一行 取出这行最左边 n个字符 与输入拼音匹配 取出这一行汉字 已经超过最后一行 否 是 是 否 显示汉字 取出第一行 重新输入拼音 参考文献 (References) [1] 桑楠. 嵌入式系统原理及应用开发技术[M]. 北京: 北京航空 航天大学出版社, 2002. [2] 程龙. 基于Qt_E构建嵌入式 Linux中文环境[D]. 西安电子科 技大学, 2007. [3] J. Blanchette, M. Summerfield著, 闫峰欣等译. C++ GUI Qt4 编程(第二版)[M]. 北京: 电子工业出版社, 2008. [4] 陈晓雷, 谢文, 邓浩. 基于QT/E 的嵌入式 Linux中文输入法 的设计与实现[J]. 郑州轻工业学院学报, 2009, 24(6): 5-8. [5] 谢芬, 潘丽, 刘守印. 基于QT/E 的嵌入式Linux系统的软键 盘实现[J]. 电子设计工程, 2012, 20(5): 117-179. [6] 龙中花, 廖建明. 基于 Qtopia 的中文输入法设计与实现[J]. 成都信息工程学院学报, 2004, 19(4): 527-531. [7] 徐英慧. 基于Qtopia 的中文输入法设计与实现[J]. 微计算机 信息, 2008, 24(10): 3. Figure 7. Chinese character search algorithm flow chart 图7. 汉字查找算法流程图 |