隨著(zhù)基于ARM內核芯片的大規模應用,手持嵌入式設備迎來(lái)了一個(gè)龐大的市場(chǎng)。與用戶(hù)直接打交道的圖形界面的友好程度決定了用戶(hù)對該產(chǎn)品的感觀(guān)認識。在這個(gè)方興末艾的市場(chǎng),嵌入式Linux由于其系統優(yōu)異的健壯性,以及開(kāi)源、免費等顯著(zhù)優(yōu)勢,成為嵌入式設備的主流操作系統。其中,Qtopia是Trolltech公司為采用嵌入式Linux操作系統的消費電子設備而開(kāi)發(fā)的綜合應用平臺,因其友好的界面、完善的開(kāi)發(fā)環(huán)境,已被國內移動(dòng)電話(huà)制造商中興通訊選作其移動(dòng)電話(huà)ZTEU980基于Linux的應用開(kāi)發(fā)框架,使Qtopia電話(huà)版成為中興通訊支持中國3G標準TD-SCDMA的核心部件,Qtopia在嵌入式市場(chǎng)的競爭中撥得頭籌。 在Qtopia的應用中,有許多需要用戶(hù)輸入本地文字的場(chǎng)合,如短信、通訊錄及記事本等,而Qtopia現有的輸入方式,是基于虛擬的QWERTY全鍵盤(pán)的,在實(shí)際應用中,這種QWERTY全鍵盤(pán)不僅需要用戶(hù)雙手進(jìn)行操作,而且由于按鍵排布緊密,從而導致誤碼率居高不下。 本文提出一種基于Qtopia的采用傳統九宮格方式的中文輸入法設計。傳統九宮格的虛擬鍵盤(pán)不僅符合大眾的使用習慣,而且可以實(shí)現單手操作,可以為用戶(hù)帶來(lái)舒適的輸入體驗,提高產(chǎn)品的市場(chǎng)占有率。 1 Qtopia中文編碼及插件技術(shù) 要實(shí)現漢字在Qtopia系統里正確處理并顯示,必須滿(mǎn)足兩個(gè)前提條件:一是系統要有支持中文的編碼;另一個(gè)是要有能顯示這個(gè)中文編碼的字符字體存在。本文的Linux開(kāi)發(fā)環(huán)境代碼編輯器的編碼為GBK,目標機上的Qtopia平臺使用Unicode編碼,所以在程序里首先按如下的方式進(jìn)行編碼轉換: 接下來(lái)為Qtopia系統提供中文字體,Qtopia支持多種字體,包括ttf,bdf,qpf格式。其中qpf格式的字體使用最為方便,本文采用支持中文的Simsun_120_50.qpf字體文件,把該字體文件保存至MYMQTEDIR/lib/fonts目錄下,修改字體鏈接fontdir文件,在菜單Appearance的Font選項里選中該字體,此時(shí)系統中文顯示正常。 在Qtopia中,輸入法是以基于插件的方式實(shí)現的,Qtopia插件分為應用程序插件、服務(wù)器插件和系統插件3種。其中,應用程序插件是應用程序使用的插件,服務(wù)器插件是在啟動(dòng)時(shí)由Qtopia服務(wù)器進(jìn)行裝載的插件,系統插件是在應用程序啟動(dòng)時(shí)被裝載的插件。本文所涉及的輸入法屬于服務(wù)器插件。 Qtopia中通過(guò)類(lèi)似COM的層來(lái)使用插件,建立一個(gè)插件的基本步驟為:創(chuàng )建插件的接口;寫(xiě)插件將提供的功能函數;為接口定義子類(lèi);創(chuàng )建一個(gè)插件實(shí)例;裝載插件。 在實(shí)現輸入法插件的創(chuàng )建后,需將該插件編譯成動(dòng)態(tài)鏈接庫的形式,并安裝到插件對應的目錄下,對于輸入法插件而言。指定的存放目錄為$QTEDIR/plugins/inputmethods。系統啟動(dòng)時(shí),插件裝載器會(huì )自動(dòng)裝載這個(gè)文件夾里的輸入法插件。 2 輸入法在Qtopia中的實(shí)現 2.1 輸入法模塊的實(shí)現 中文拼音輸入法的設計,要實(shí)現數字拼音鍵到漢字的轉換。所謂數字拼音是指按照手機鍵盤(pán)上英文字母的布局來(lái)輸入漢語(yǔ)拼音所得到的一串數字,對于九宮格形式的虛擬鍵盤(pán)來(lái)說(shuō)。其鍵盤(pán)的布局特點(diǎn)導致不能直接輸人漢語(yǔ)拼音而只能輸入數字鍵盤(pán)掃描碼,然后由掃描碼的識別及糾錯處理模塊對其進(jìn)行拼音組合、文字匹配檢索后才能得到相應的漢字,處理流程見(jiàn)圖1。 首先用戶(hù)輸入的數字鍵盤(pán)掃描碼要轉換為相應的漢語(yǔ)拼音,本文采用查表檢索法實(shí)現數字拼音到漢語(yǔ)拼音的轉換,并對用戶(hù)無(wú)效的拼音組合進(jìn)行高亮提示。然后根據字典數據庫檢索相應的漢字,并對用戶(hù)的輸入進(jìn)行機器學(xué)習,針對用戶(hù)輸入習慣不同,對用戶(hù)輸入常用詞進(jìn)行自適應排序。利用自帶字庫的基礎語(yǔ)言模型與用戶(hù)常用詞模型相結合的檢索技術(shù)對候選字進(jìn)行自動(dòng)排序,得到最終的候選字輸出。如圖2所示。 該輸入法注重對用戶(hù)輸入的常用詞、高頻詞的自適應,利用基礎字庫模型和用戶(hù)習慣模型結合進(jìn)行解碼。主要思想是通過(guò)跟蹤用戶(hù)輸入過(guò)程,記錄用戶(hù)輸入習慣,然后根據用戶(hù)的輸入字詞的不同概率動(dòng)態(tài)調整相應的數據,并將結果存放于用戶(hù)模型中。 2.2 移植輸入法到Qtopia中 Qtopia 2.x系統中支持彈出式輸入法的插件實(shí)現。彈出式輸入法在沒(méi)有鍵盤(pán)和其他文件輸入設備時(shí)使用,它彈出窗口部件,用戶(hù)可通過(guò)設備的觸摸屏操作產(chǎn)生鍵事件,它們也被看做基于筆的輸入方法。在本文中,采用ExtInputMethodInterface作為創(chuàng )建輸入法插件的接口。 (1)為彈出輸入方法設備窗口部件。彈出輸入法必須提供一個(gè)顯示在屏幕上的QWidget窗口部件,并在一個(gè)鍵被按下時(shí)發(fā)出一個(gè)信號,Qtopia處理輸入窗口部件的顯示和隱藏。信號和插槽是Qt的核心機制,應用于對象之間的通信,信號和插槽是真正的信息封裝,所有從QObject或其子類(lèi)派生的類(lèi)都能夠包含信號,當對象改變狀態(tài)時(shí),信號就由該對象發(fā)射(emit)出去,對象并不需要知道另一端是誰(shuí)在接收這個(gè)信號。本文的輸入法設計,在用戶(hù)點(diǎn)擊選字按鍵時(shí),一個(gè)包含所選字符的keyPress信號被發(fā)射出去。 在這個(gè)keyPress信號中,ushort unicode為輸入字符的unicode編碼值,這樣就可以把所選字符的編碼傳遞給Qtopia系統,系統就會(huì )在當前光標處輸入相應文字。 (2)創(chuàng )建一個(gè)ExtInputMethodInterface插件。 (3)編譯該輸入法插件。為了編譯輸入法插件,需要在.pro文件中設置如下: 依次完成上述步驟,即可實(shí)現Qtopia輸入法的創(chuàng )建及編譯,本文所實(shí)現的中文拼音輸入法如圖3所示,當用戶(hù)選擇該輸入法時(shí),會(huì )彈出一個(gè)輸入面板,該面板由候選字區、拼音組合選擇區、拼音輸人區及功能區組成。在開(kāi)發(fā)板上運行該輸入法如圖3所示。 候選字區 位于面板的最上方,由6個(gè)QPushButton組成,單擊后相應的文字會(huì )輸出至Qtopia系統當前光標處,并自動(dòng)聯(lián)想該字的常用詞組合。 拼音組合選擇區 位于面板下方的左側區域,由一個(gè)QListBox,供用戶(hù)選擇候選的拼音組合。 3×3的輸入區 位于面板下方的中間區域,與傳統的手機鍵盤(pán)相對應,由a~z拼音字母及“*”鍵組成,“*”鍵為標點(diǎn)符號選擇鍵,其余8個(gè)按鍵為拼音輸入; “Del”按鍵 位于面板下方右側區域,用來(lái)回退當前的拼音組合,如果當前拼音組合不為空,刪除該組合最后一個(gè)拼音字母,并刷新拼音組合及候選字,若當前的拼音組合為空,則單擊刪除光標左側的一個(gè)字符,長(cháng)按該鍵則連續刪除光標左側字符; “Up”及“Down”按鍵 候選字區的上下翻頁(yè)鍵。 3 結 語(yǔ) 基于Qtopia的插件技術(shù),實(shí)現了傳統九宮格方式的中文拼音輸入法,該輸入法在輸入中文時(shí)支持詞語(yǔ)聯(lián)想功能及用戶(hù)輸入高頻詞自適應功能。該輸入法在一個(gè)基于Linux 2.6.13內核的S3C2440嵌入式系統上運行成功,經(jīng)過(guò)長(cháng)時(shí)間的測試,該輸入法運行穩定,響應速度流暢,可給用戶(hù)帶來(lái)舒適的輸入體驗。 |