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