基于Qt/E的嵌入式Linux中文輸入法的設(shè)計(jì)與實(shí)現(xiàn)

圖3軟鍵盤(pán)界面
軟鍵盤(pán)左上角的CheckBox用于中英文切換,選中時(shí),輸人中文,不選時(shí)輸入的則是英文,在英文輸入時(shí),若按下Caps鍵軟鍵盤(pán)面板上的數(shù)字鍵,切換成常用符號(hào),英文全變成大寫(xiě)。1-r按鍵是本輸入法的特色,按下1-r鍵可以選擇需要輸出漢字的字體和大小,其余的按鍵功能同Pc機(jī)鍵盤(pán)。
因?yàn)闆](méi)有桌面管理程序,本文還設(shè)計(jì)了一個(gè)置頂?shù)母?dòng)框,用于打開(kāi)軟鍵盤(pán)。當(dāng)點(diǎn)擊輸入法按鍵時(shí),彈出軟鍵盤(pán)。
Qt/E輸入法基類(lèi)為QWSInputMethod,在這個(gè)基類(lèi)中定義了一些接口用以支持輸入法程序設(shè)計(jì),并從QWSInputMethod這個(gè)類(lèi)繼承出一個(gè)輸入法類(lèi),在這個(gè)類(lèi)中處理鍵盤(pán)和鼠標(biāo)事件,把接收到的鍵盤(pán)事件按照輸入法的編碼規(guī)則轉(zhuǎn)換為對(duì)應(yīng)的中文,一個(gè)漢字,或者是一個(gè)中文短語(yǔ),并把最終用戶(hù)的選擇發(fā)送到當(dāng)前編輯窗口。
1nputMethod類(lèi)繼承QWSInputMethod類(lèi)來(lái)實(shí)現(xiàn)輸入法的處理,在這里實(shí)現(xiàn)的幾個(gè)主要的接口函數(shù)有:
virtualboolfilter(intunicode,intkeycode,intmodifiers,bootisPress,boolautoRepeat)
這個(gè)接口的作用就是過(guò)濾鍵盤(pán)事件,在這個(gè)函數(shù)中處理鍵盤(pán)輸人,并且根據(jù)相應(yīng)的輸人法方法把鍵盤(pán)輸入轉(zhuǎn)換為相應(yīng)的中文。
voidsendc0mmitstring(constQStringeommitString,intrepIaceFromPosion:0,intreplaceLength=0)
這個(gè)接口函數(shù)表示把相應(yīng)的字符串發(fā)送到當(dāng)前編輯窗口,一般用于在用戶(hù)作出最終的選擇之后,把相應(yīng)的字符串發(fā)送出去。
voidsel1dPreeditsng(constQStringpreeditString,inteursorPosition,intselectionLength=0)
把當(dāng)前正在編輯的字符串發(fā)送給當(dāng)前編輯窗口。
為了使輸入法成為系統(tǒng)級(jí)輸入法,在這個(gè)類(lèi)中還需要實(shí)現(xiàn)輸入法安裝/卸載函數(shù),這樣系統(tǒng)中才會(huì)有全局的輸人法模塊,輸入法才能工作。
install和release輸入法的函數(shù),就是通過(guò)調(diào)用QWSServer類(lèi)中的成員函數(shù)來(lái)實(shí)現(xiàn)的。QWSServer::
setCurrentInputMethod這個(gè)函數(shù)為當(dāng)前的Qt/E安裝一個(gè)輸入法,如設(shè)置拼音輸入法:
QWSServer::setcurrentInputMeth0d(pinyin)
如果把參數(shù)設(shè)置為NULL,就是卸載輸入法。輸入法安裝完成之后,輸入法類(lèi)中就可以接收到鍵盤(pán)事件了,拼音輸入法的具體流程見(jiàn)圖4。

圖4拼音輸入法按鍵處理流程
最終拼音輸入法在三星S3C2440平臺(tái)上運(yùn)行的界面見(jiàn)圖5。

圖5運(yùn)行結(jié)果
3結(jié)語(yǔ)
本文基于三星S3C2440平臺(tái),實(shí)現(xiàn)了基于Qt/E4。5的拼音輸入法,并重點(diǎn)闡述了Qt/E的中文輸入法原理,在這個(gè)基礎(chǔ)上可以比較容易地開(kāi)發(fā)出其他的中文輸入法。
linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)linux相關(guān)文章:linux教程
評(píng)論