嵌入式输入法设计与实现

时间:2022-05-27 10:46:02

嵌入式输入法设计与实现

摘要:由于跨平台的C++图形用户界面库(Qt)在Linux系统、嵌入式系统、Windows系统等不同平台上没有开源和高效的输入法,会存在代码不兼容等问题,因此本文设计并实现了跨平台轻量级输入法。该实验首先要根据相关的需求去找到相应的字库,再对输入法进行一些常用功能的相关设计,并调用事先存放的字库进行中文拼音到汉字的查询、匹配、选词以及显示等功能,最终实现中英文输入功能。

关键词:输入法;Qt;Windows;嵌入式

科学技术的进步促进了嵌入式系统的快速发展,目前嵌入式系统已广泛应用于各个领域。然而,嵌入式系统的资源有限,国内用户对于轻量级的输入法的需求日益迫切[1]。目前,由于嵌入式系统中使用的中文输入法占用了大量的资源,导致系统运行非常缓慢,影响到用户的体验。Linux系统下的Qt无法使用汉字,只能通过Windows中的文本编辑进行粘贴复制到所需汉字的地方,而且在开发板上并没有外接键盘或者其他输入文字的设备,操作非常不便捷,造成了一些困扰。虽然找到了很多相关资源来解决这个问题,但是都不够完善。因此,本文研究了关于Qt输入法的相关内容,希望可以在Qt上植入一个小系统,方便以后的使用。嵌入式的发展越来越广泛,现如今国内人员对于轻量级输入法的需求越来越多。目前,国内外的嵌入式输入法,都是在Qt平台下应用和开发的。在Qt5.7版本之后,Qt正式引入输入法(支持中文拼音输入法),但它基于QML设计。本文设计基于Qt的嵌入式输入法软件的目的是设计一个能够便捷使用的输入法。在使用Qt进行嵌入式开发时可以方便地输入中文,并且无需外部输入设备即可方便地输入和修改文本。本设计可应用于Qt开发板或其他电子设备,为以后修改各种信息提供方便,大大提高了开发板的使用效率。

1系统相关开发技术分析

1.1Qt简介Qt是一个非常完美的c++应用程序框架,一个全面的跨平台框架,而且它是一个可以很好学习C++的平台。Qt本身是非常庞大的,它不仅仅是一个图形用户界面组件[2]。使用Qt,可以在某种程度上获得“一站式”解决方案,例如不再需要学习STL,不需要使用c++,不需要四处寻找解析XML、连接字库和访问网络的第三方库,因为Qt已经将这些技术嵌入其中[3]。Qt5的基础模块EssentialsModules,可以在所有平台上使用。扩展模块Add-onModules构建在基础模块之上,可以在任何一个能够运行Qt的平台上进行适当引入,所有模块只需应用图形用户界面(GraphicalUserInterface,GUI)模块。QtGUI模块,它提供了GUI程序的基本功能,提供了所有图形用户界面程序所需的通用功能[4]。1.2输入法的字库介绍对于开发一个输入法来讲,首先要有一个合适的字库。字库的资源有很多,可以根据自己的需求去选择相应的字库。本文实验所用字库包含一些常见的词组、短语、汉字。1.3QtCreator开发平台介绍QtCreator是一个使用Qt开发的IDE,属于非常友好的开发环境,非常利于刚开始接触Qt的开发人员使用[5]。QtCreator在测试Qt的应用程序的时候非常快速高效,是一个先进的可视化调试器[6]。QtCreator中包含了QtAssistant、QtDesigner等工具。可以从开始菜单启动它们,也可以在安装目录中找到[7]。所有这些工具都已经集成到QtCreator中,但Qt示例和演示只在Qt4中可用,在最新Qt5中已经被删除[8]。

2系统需求分析

2.1需求分析的简述需求分析就是首先要明确需求方的需求,开发方根据这些需求去开发出相应的产品,即明确“需要做什么”,是开发一个产品的首要前提[9]。本设计主要是实现一个可以用于嵌入式平台的Qt轻量级输入法,也可以用于其他各个平台,输入法所占用的系统资源非常少,其输入法的界面简洁、美观、易于用户操作,并且具有非常好的移植性和扩展性。2.2系统功能分析本文设计的基于Qt的嵌入式输入法软件系统主要功能如下:①“切换键盘的状态”功能,用户选择此功能可以切换中文、英文、字符数字的模式;②“切换英文大小写”功能,用户选择此功能时可以切换英文的大小写;③“删除字母、汉字或字符”功能,用户选择此功能可以删除刚输入的字符。2.3可行性分析2.3.1经济可行性分析只有将效益以及投资进行比较,才可以说明在系统的经济可行性。本文设计的基于Qt的嵌入式输入法软件投资较低,只需要配置相应的软件以及一台可以运行的电脑,此外本系统可以有效地解决Qt中无法输入汉字的问题,而且占用资源较少。从长远来看,这也是信息化的必经之路。因此,本文设计的基于Qt的嵌入式输入法软件前景十分广阔。2.3.2技术能力分析根据系统开发的功能需求分析,则选择采用Qt5进行开发,Qt5是Qt的最新版本,因此从技术上讲,这是完全可行的。

3输入法的总体设计

3.1输入法功能模块的设计分析Qt输入法的功能模块图主要设计了Qt输入法功能的总体层次结构。具体功能模块有软键盘功能模块、英文大小写输入模块、中文输入功能模块、常用的标点符号及其数字功能模块。具体Qt输入法的功能模块图如图1所示。3.2输入法的原理3.2.1AbstractKeyboard与KeyboardKeyboard类通过继承AbstractKeyboard类,而继承于QWidget。之所以没有直接继承于QWidget,是因为本文系统所设计的Qt输入法有多个键盘,其中包含有数字及字符键盘和字母键盘。若是单个键盘的话,这种情况下则可以直接让Keyboard类直接继承于QWidge,而本文设计的输入法若是直接继承的话,会导致切换键盘的时候变得非常麻烦,不可直接继承。在AbstractKeyboard类中提供了name和setName接口,其原因是这两个接口可以更加方便地标识多个键盘的情况。3.2.2Keyboard与KeyButton一个键盘(Keyboard)存在多个按键(KeyButton),因此Keyboard需要通过h1、h2、h3、h4构造多个按键,绑定在Keyboard类的switchCapsLock槽函数用于实现英文大小写的切换功能。3.2.3KeyButton与KeyModeKeyMode处于KeyButton中,其主要的任务是表示出按键的多种不同的显示方式。例如,以键盘的第一个字母为例,当从大写字母转换成小写字母时,按下变换大小写的按键,A则会变成a。KeyMode中的Mode是个结构体,它包含按键的key值和按键的value以及按键在界面的显示值,还有按键的类型。其中的按键类型(Type)为枚举类型(enum)。关于键盘使用的原理,当用户按下键盘按钮时,KeyButton会像Keyboard发送一个pressed的信号,随即会触发onKeyPressed槽函数,AbstractKeyBoard则会向Qapplication发送按键事件,用户则可使用键盘。用户使用键盘顺序图如图2所示。关于切换按键模式的原理,以切换大小写按钮为例进行分析。当用户想切换按键模式时,按下切换大小写按钮,则KeyButton向Keyboard发送一个pressed信号,Keyboard接受到信号之后,则会触发事先绑定好的switchCapsLock槽函数,随即遍历调用KeyButton里的switchCapsLock函数,KeyButton则会根据自身的Mode的模式显示对应字符,就可以进行大小写的切换。用户切换大小写键盘如3图所示。3.3输入法流程图使用Qt输入法的整个流程如下:首先打开已经打包好的.exe程序,默认模式是小写英文字母的模式,可根据对自己的需求选择相应的输入模式,Qt输入法主要模式有英文字母的大小写模式、中文模式、数字以及字符模式,选择相应模式进行输入;其次,输入时,若是不小心输入错误的字母、汉字、字符,则可以点击删除按钮进行删除,在汉字删除的时候,可以删除候选框和输入框两个地方的汉字,即根据光标的地方去删除相应的内容;最后,不使用键盘时,点击关闭键盘,即可退出程序。

4字库的设计与实现

输入法中总共包含两个字库,根据需求,本设计所选的字库比较小,若以后有更大需求使用者可以自行添加。对于中文输入则匹配符合拼音的中文,取拼音首字母进行索引,在匹配中文同时,可以模糊查询字库里面的内容。将这两个字库加入到Qt的资源文件中,即可引用。一些常见的字和词组的内容如图4所示。

5结语

本设计主要以Qt为基础,解决了在Linux中的Qt没有办法使用中文的问题,通过深入研究文献、总结方法、添加字库、取拼音首字母索引,在匹配中文同时可以模糊查询字库,开发了一款基于Qt的嵌入式输入法软件。该软件可以成功在Linux系统下使用。本文设计的软件系统还有很大的发展空间,如没有换肤的模块,只能使用默认的皮肤,字库中等,足够日常使用。接下来对以上不足进行相应的模块设计和实现。

作者:李港 单位:宁夏大学信息工程学院

上一篇:缓释通风技术在储粮的应用 下一篇:函数数控宏程序编制与应用