一种多功能软键盘的设计
2018-07-23中船重工第七一六研究所陈国华
中船重工第七一六研究所 陈国华
引言
随着电子计算机技术的飞速发展,人们对人机交互的方式也提出了更高的要求。人机交互方式已经不再局限于传统的键盘、鼠标、手写板、语音输入等,人机交互方式将变得越来越多样化[1]。目前,触摸屏技术已广泛应用于各种个人便携式电子产品、公共信息查询设备、电子游戏、通讯设备、自动化办公等,已成为最受欢迎的人机交互方式。软件盘是应用于触摸屏上的重要信息输入工具,它可以代替传统物理键盘,通过点击显示在屏幕上的按键完成字母、数字、符号、汉字等不同内容的输入以及其他操作[2]。JARI-Works操作系统是中船重工第716研究所自主研发的实时嵌入式操作系统,具备强实时内核与高效人机交互跨界融合支撑能力、多核实时任务管理与并行计算支撑能力、可快速安装与部署等特点,特别适合轻量级的人机交互设备。Qt是挪威的Trolltech公司开发的一款跨平台的基于C++的图形界面开发软件,它提供给应用程序开发者建立艺术级的图形用户界面所需的所有功能[3]。Qt完全面向对象,很容易进行扩展,并且允许真正的组件编程。本文介绍在JARI-Works操作系统下基于Qt的软件盘的设计和实现方法,该键盘功能全面,界面美观、操作简单,可以实现字母、符号、拼音、手写、语音等多种输入方式,可以应用于基于JARI-Works操作系统的触摸屏设备。
1.Qt的设计方法
Qt拥有一系列窗体,可提供标准的GUI功能。Qt也提供事件模型用来处理鼠标、按键等用户操作[4]。另外,Qt有3中特殊的通信机制:QCOP协议、信号-槽机制和FIFO机制等,其中信号-槽机制是Qt的核心机制。信号和槽是一种高级接口,应用于对象之间的通信,取代了传统的回调函数方式,具有更好的安全性。当某个信号对其客户或所有者的内部状态发生改变,信号被一个对象发射[5]。只有定于过这个信号的类及其派生类能够发射这个信息。通过调用QObject对象的connect函数来将某个对象的信号与另外一个对象的槽函数相关联,这样当一个信号被发射时,与其相关联的槽将被立刻执行,就像一个正常的函数调用一样。如图1所示,信号和槽之间可以一对一,一对多,多对一,多对多,还可以信号触发信号,非常灵活易用。
图1 Qt信号与槽的关系图
2.多功能软键盘的设计
多功能软键盘包含了字母、数字、符号、拼音、手写、语音等多种人机交互方式,具有美观、简洁、易用等特点,因此,软键盘的按键设计和布局显得尤为重要。键盘总体布局沿用传统的键盘布局模式,由于键盘兼顾多种输入方法,需要将输入键和功能键区分出来。其中,功能键包括回车键、退格键、空白键、输入法切换键和符号/数字切换键,这5个键作为公共键,每种输入方式都需要配置。输入法切换键采用简单的轮询的方式,每按一次,切换一种输入法。在每种输入法使用过程可以按符号/数字切换键后将进入符号/数字界面,再按一次则返回到原输入法界面。下面将对各种输入方式进行分析:
英文字母输入法:英文字母输入比较简单,主要包括26个英文字母键,通过Caps切换字母大小写。
拼音输入法:拼音输入法包括输入区和汉字候选区,输入区为26个字母键,候选区在没有任何输入时不可见,当有输入时才显示。拼音输入法具有联想功能,输入若干个拼音首字母,候选区则排列出符合条件的多个词组。可以按移动键进行浏览选择,若按空白键则默认选第一个汉字词组,若按回车键则默认字母直接输入。
手写输入法:手写输入法主要包括手写区、文字候选区和一些简单的功能键。手写区用于用户在该区域书写要输入的内容,通过系统识别后在文字候选区显示出来,候选区类似拼音的候选区,用户可以浏览并选择满足要求的内容。另外,在手写输入的过程,用户可以通过回撤键撤除最后一个笔画输入,通过清除键清除当前手写区。手写具有默认选择功能,在用户书写过程停顿一秒中以上,系统将认为书写已经结束,用户再次书写时,系统默认选择候选区的第一个内容作为上次的输入结果。
语音输入法:语音输入法也比较简单,主要包括输入按钮和候选区,用户通过按住输入按钮后进行语音输入,系统在候选区显示用户输入的文字,用户可以选择满足要求的输入内容。
符号/数字输入:用户进行符号/数字输入界面时,可以输入符号和数字,其中符号分为中英文符号,通过中英文切换键进行切换。
下面图2为软键盘英文字母输入法界面,图3为软键盘拼音输入法界面:
图2 软键盘英文字母输入法界面
图3 软键盘拼音输入法界面
3.多功能软键盘的实现
3.1 块的划分与实现
多功能软键盘的主要采用Qt来编程实现,根据前面对软键盘主要功能特点的分析以及Qt编程的优势,采用模块化的方法来实现。定义BaseKeyBorad类为基础类,主要功能包括键盘的基本框架和公共按键的定义,其他模块包括LetterKeyBoard类、PinyinKeyBoard类、HandKeyBoard类、SoundKeyBoard类、SignKeyBoard类都继承BaseKeyBorad类,除了实现公共按键的功能外,还需要实现自身特有的按键功能。主要功能模块之间的类关系图如下图4所示。
图4 主要功能模块之间的类关系图
3.2 按键事件的实现
软键盘要实现的接口函数最多的是按键的按下与释放事件,在某个按键被按下或释放的时候发送信号通知键盘自己被按下或释放。通过重写QPushButton类为MyButton类的槽函数void mousePressEvent(QMouseEvent*e)函数和void mouseReleaseEvent(QMouseEvent *e),在mousePressEvent函数中发送keyClick信号,在mouseReleaseEvent函数中发送keyRelease信号。在每个输入法类中定义该键盘的按键,并将按键的keyClick信号与输入法类中的KeyPress槽函数关联起来。当按键被按下的时候就发送key-Click信号,keyClick信号触发keyPress槽函数,在keyPress函数中通过调用sendEvent发送正确的键值,从而实现字符输入。
3.3 长按事件和默认选择事件的实现
在按键输入的过程中,存在连续输入的情况,当按下某个键时间大于1秒中的时候,将视为有连续输入。通过QTimer定时器模拟长按事件,当有长按事件时,启动一个0.1秒的定时器,这样每间隔0.1秒将模拟一个按键输入一次,直到该按键被释放,定时器将停止。
在手写输入的过程中,当用户输入停止1秒钟以上将被默认为停止输入,软件将默认将第一个备选项作为输入,在用户再次输入时清除输入区,并选择上次输入的第一个备选项作为用户输入。通过QTimer定义一个一次性定时器,用户每次手写输入都会关闭之前定时器,触发一个新定时器,当输入结束时间大于1秒钟以上触发keyPress的sendEvent事件。
4.结束语
本文通过一种多功能软键盘软件的设计与实现,并在触摸屏输入终端上进行测试,能够方便、快捷、有效的代替传统的物理键盘,为多功能显控设备提供更加方便、多样化的系统访问与服务。