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