中船重工第七一六研究所 陳國(guó)華
隨著電子計(jì)算機(jī)技術(shù)的飛速發(fā)展,人們對(duì)人機(jī)交互的方式也提出了更高的要求。人機(jī)交互方式已經(jīng)不再局限于傳統(tǒng)的鍵盤、鼠標(biāo)、手寫板、語(yǔ)音輸入等,人機(jī)交互方式將變得越來(lái)越多樣化[1]。目前,觸摸屏技術(shù)已廣泛應(yīng)用于各種個(gè)人便攜式電子產(chǎn)品、公共信息查詢?cè)O(shè)備、電子游戲、通訊設(shè)備、自動(dòng)化辦公等,已成為最受歡迎的人機(jī)交互方式。軟件盤是應(yīng)用于觸摸屏上的重要信息輸入工具,它可以代替?zhèn)鹘y(tǒng)物理鍵盤,通過(guò)點(diǎn)擊顯示在屏幕上的按鍵完成字母、數(shù)字、符號(hào)、漢字等不同內(nèi)容的輸入以及其他操作[2]。JARI-Works操作系統(tǒng)是中船重工第716研究所自主研發(fā)的實(shí)時(shí)嵌入式操作系統(tǒng),具備強(qiáng)實(shí)時(shí)內(nèi)核與高效人機(jī)交互跨界融合支撐能力、多核實(shí)時(shí)任務(wù)管理與并行計(jì)算支撐能力、可快速安裝與部署等特點(diǎn),特別適合輕量級(jí)的人機(jī)交互設(shè)備。Qt是挪威的Trolltech公司開(kāi)發(fā)的一款跨平臺(tái)的基于C++的圖形界面開(kāi)發(fā)軟件,它提供給應(yīng)用程序開(kāi)發(fā)者建立藝術(shù)級(jí)的圖形用戶界面所需的所有功能[3]。Qt完全面向?qū)ο螅苋菀走M(jìn)行擴(kuò)展,并且允許真正的組件編程。本文介紹在JARI-Works操作系統(tǒng)下基于Qt的軟件盤的設(shè)計(jì)和實(shí)現(xiàn)方法,該鍵盤功能全面,界面美觀、操作簡(jiǎn)單,可以實(shí)現(xiàn)字母、符號(hào)、拼音、手寫、語(yǔ)音等多種輸入方式,可以應(yīng)用于基于JARI-Works操作系統(tǒng)的觸摸屏設(shè)備。
Qt擁有一系列窗體,可提供標(biāo)準(zhǔn)的GUI功能。Qt也提供事件模型用來(lái)處理鼠標(biāo)、按鍵等用戶操作[4]。另外,Qt有3中特殊的通信機(jī)制:QCOP協(xié)議、信號(hào)-槽機(jī)制和FIFO機(jī)制等,其中信號(hào)-槽機(jī)制是Qt的核心機(jī)制。信號(hào)和槽是一種高級(jí)接口,應(yīng)用于對(duì)象之間的通信,取代了傳統(tǒng)的回調(diào)函數(shù)方式,具有更好的安全性。當(dāng)某個(gè)信號(hào)對(duì)其客戶或所有者的內(nèi)部狀態(tài)發(fā)生改變,信號(hào)被一個(gè)對(duì)象發(fā)射[5]。只有定于過(guò)這個(gè)信號(hào)的類及其派生類能夠發(fā)射這個(gè)信息。通過(guò)調(diào)用QObject對(duì)象的connect函數(shù)來(lái)將某個(gè)對(duì)象的信號(hào)與另外一個(gè)對(duì)象的槽函數(shù)相關(guān)聯(lián),這樣當(dāng)一個(gè)信號(hào)被發(fā)射時(shí),與其相關(guān)聯(lián)的槽將被立刻執(zhí)行,就像一個(gè)正常的函數(shù)調(diào)用一樣。如圖1所示,信號(hào)和槽之間可以一對(duì)一,一對(duì)多,多對(duì)一,多對(duì)多,還可以信號(hào)觸發(fā)信號(hào),非常靈活易用。
圖1 Qt信號(hào)與槽的關(guān)系圖
多功能軟鍵盤包含了字母、數(shù)字、符號(hào)、拼音、手寫、語(yǔ)音等多種人機(jī)交互方式,具有美觀、簡(jiǎn)潔、易用等特點(diǎn),因此,軟鍵盤的按鍵設(shè)計(jì)和布局顯得尤為重要。鍵盤總體布局沿用傳統(tǒng)的鍵盤布局模式,由于鍵盤兼顧多種輸入方法,需要將輸入鍵和功能鍵區(qū)分出來(lái)。其中,功能鍵包括回車鍵、退格鍵、空白鍵、輸入法切換鍵和符號(hào)/數(shù)字切換鍵,這5個(gè)鍵作為公共鍵,每種輸入方式都需要配置。輸入法切換鍵采用簡(jiǎn)單的輪詢的方式,每按一次,切換一種輸入法。在每種輸入法使用過(guò)程可以按符號(hào)/數(shù)字切換鍵后將進(jìn)入符號(hào)/數(shù)字界面,再按一次則返回到原輸入法界面。下面將對(duì)各種輸入方式進(jìn)行分析:
英文字母輸入法:英文字母輸入比較簡(jiǎn)單,主要包括26個(gè)英文字母鍵,通過(guò)Caps切換字母大小寫。
拼音輸入法:拼音輸入法包括輸入?yún)^(qū)和漢字候選區(qū),輸入?yún)^(qū)為26個(gè)字母鍵,候選區(qū)在沒(méi)有任何輸入時(shí)不可見(jiàn),當(dāng)有輸入時(shí)才顯示。拼音輸入法具有聯(lián)想功能,輸入若干個(gè)拼音首字母,候選區(qū)則排列出符合條件的多個(gè)詞組??梢园匆苿?dòng)鍵進(jìn)行瀏覽選擇,若按空白鍵則默認(rèn)選第一個(gè)漢字詞組,若按回車鍵則默認(rèn)字母直接輸入。
手寫輸入法:手寫輸入法主要包括手寫區(qū)、文字候選區(qū)和一些簡(jiǎn)單的功能鍵。手寫區(qū)用于用戶在該區(qū)域書(shū)寫要輸入的內(nèi)容,通過(guò)系統(tǒng)識(shí)別后在文字候選區(qū)顯示出來(lái),候選區(qū)類似拼音的候選區(qū),用戶可以瀏覽并選擇滿足要求的內(nèi)容。另外,在手寫輸入的過(guò)程,用戶可以通過(guò)回撤鍵撤除最后一個(gè)筆畫輸入,通過(guò)清除鍵清除當(dāng)前手寫區(qū)。手寫具有默認(rèn)選擇功能,在用戶書(shū)寫過(guò)程停頓一秒中以上,系統(tǒng)將認(rèn)為書(shū)寫已經(jīng)結(jié)束,用戶再次書(shū)寫時(shí),系統(tǒng)默認(rèn)選擇候選區(qū)的第一個(gè)內(nèi)容作為上次的輸入結(jié)果。
語(yǔ)音輸入法:語(yǔ)音輸入法也比較簡(jiǎn)單,主要包括輸入按鈕和候選區(qū),用戶通過(guò)按住輸入按鈕后進(jìn)行語(yǔ)音輸入,系統(tǒng)在候選區(qū)顯示用戶輸入的文字,用戶可以選擇滿足要求的輸入內(nèi)容。
符號(hào)/數(shù)字輸入:用戶進(jìn)行符號(hào)/數(shù)字輸入界面時(shí),可以輸入符號(hào)和數(shù)字,其中符號(hào)分為中英文符號(hào),通過(guò)中英文切換鍵進(jìn)行切換。
下面圖2為軟鍵盤英文字母輸入法界面,圖3為軟鍵盤拼音輸入法界面:
圖2 軟鍵盤英文字母輸入法界面
圖3 軟鍵盤拼音輸入法界面
多功能軟鍵盤的主要采用Qt來(lái)編程實(shí)現(xiàn),根據(jù)前面對(duì)軟鍵盤主要功能特點(diǎn)的分析以及Qt編程的優(yōu)勢(shì),采用模塊化的方法來(lái)實(shí)現(xiàn)。定義BaseKeyBorad類為基礎(chǔ)類,主要功能包括鍵盤的基本框架和公共按鍵的定義,其他模塊包括LetterKeyBoard類、PinyinKeyBoard類、HandKeyBoard類、SoundKeyBoard類、SignKeyBoard類都繼承BaseKeyBorad類,除了實(shí)現(xiàn)公共按鍵的功能外,還需要實(shí)現(xiàn)自身特有的按鍵功能。主要功能模塊之間的類關(guān)系圖如下圖4所示。
圖4 主要功能模塊之間的類關(guān)系圖
軟鍵盤要實(shí)現(xiàn)的接口函數(shù)最多的是按鍵的按下與釋放事件,在某個(gè)按鍵被按下或釋放的時(shí)候發(fā)送信號(hào)通知鍵盤自己被按下或釋放。通過(guò)重寫QPushButton類為MyButton類的槽函數(shù)void mousePressEvent(QMouseEvent*e)函數(shù)和void mouseReleaseEvent(QMouseEvent *e),在mousePressEvent函數(shù)中發(fā)送keyClick信號(hào),在mouseReleaseEvent函數(shù)中發(fā)送keyRelease信號(hào)。在每個(gè)輸入法類中定義該鍵盤的按鍵,并將按鍵的keyClick信號(hào)與輸入法類中的KeyPress槽函數(shù)關(guān)聯(lián)起來(lái)。當(dāng)按鍵被按下的時(shí)候就發(fā)送key-Click信號(hào),keyClick信號(hào)觸發(fā)keyPress槽函數(shù),在keyPress函數(shù)中通過(guò)調(diào)用sendEvent發(fā)送正確的鍵值,從而實(shí)現(xiàn)字符輸入。
在按鍵輸入的過(guò)程中,存在連續(xù)輸入的情況,當(dāng)按下某個(gè)鍵時(shí)間大于1秒中的時(shí)候,將視為有連續(xù)輸入。通過(guò)QTimer定時(shí)器模擬長(zhǎng)按事件,當(dāng)有長(zhǎng)按事件時(shí),啟動(dòng)一個(gè)0.1秒的定時(shí)器,這樣每間隔0.1秒將模擬一個(gè)按鍵輸入一次,直到該按鍵被釋放,定時(shí)器將停止。
在手寫輸入的過(guò)程中,當(dāng)用戶輸入停止1秒鐘以上將被默認(rèn)為停止輸入,軟件將默認(rèn)將第一個(gè)備選項(xiàng)作為輸入,在用戶再次輸入時(shí)清除輸入?yún)^(qū),并選擇上次輸入的第一個(gè)備選項(xiàng)作為用戶輸入。通過(guò)QTimer定義一個(gè)一次性定時(shí)器,用戶每次手寫輸入都會(huì)關(guān)閉之前定時(shí)器,觸發(fā)一個(gè)新定時(shí)器,當(dāng)輸入結(jié)束時(shí)間大于1秒鐘以上觸發(fā)keyPress的sendEvent事件。
本文通過(guò)一種多功能軟鍵盤軟件的設(shè)計(jì)與實(shí)現(xiàn),并在觸摸屏輸入終端上進(jìn)行測(cè)試,能夠方便、快捷、有效的代替?zhèn)鹘y(tǒng)的物理鍵盤,為多功能顯控設(shè)備提供更加方便、多樣化的系統(tǒng)訪問(wèn)與服務(wù)。