當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式硬件

QT是挪威的Trolltech公司開發(fā)的一個(gè)跨平臺(tái)的C++的GUI組件,而Qtopia智能手機(jī)開發(fā)平臺(tái)則是基于QT的桌面系統(tǒng),是Trolltech為采用嵌入式Linux操作系統(tǒng)的消費(fèi)電子設(shè)備而開發(fā)的綜合應(yīng)用平臺(tái)。

在現(xiàn)在競(jìng)爭(zhēng)日趨激烈的智能手機(jī)開發(fā)平臺(tái)上,Qtopia以他的眾多優(yōu)點(diǎn),如自身提供豐富的窗口部件集,具有面向?qū)ο蟮奶匦?,易于擴(kuò)展,真正的組件編程等逐漸為越來(lái)越多的手機(jī)開發(fā)工程師所熟悉和使用。

本文通過(guò)結(jié)合對(duì)QT開發(fā)平臺(tái)中特殊通信機(jī)制的簡(jiǎn)略介紹,重點(diǎn)介紹了如何在Qtopia平臺(tái)上實(shí)現(xiàn)輸入法軟鍵盤的策略,以及相應(yīng)的優(yōu)化改進(jìn),使讀者能大致了解QT平臺(tái)上開發(fā)的流程,對(duì)熟悉Qtopia平臺(tái)以及在此平臺(tái)上的開發(fā)都有很好的輔助作用。

1 Qtopia內(nèi)部特殊的通信機(jī)制

在Qtopia內(nèi)部,共有3種特殊的通信機(jī)制:Qcop協(xié)議,信號(hào)-槽(signal-slot)機(jī)制和FIFO機(jī)制,其中大量應(yīng)用的是Qcop協(xié)議和信號(hào)一槽(signal-slot)機(jī)制。

Qcop是QT內(nèi)部的一種通信協(xié)議,主要用于不同的客戶之間在同一地址空間內(nèi)部或者不同進(jìn)程之間的通信,大致的使用流程是在函數(shù)中使用Qtopia定義好的類:QcopEnvelop,將相關(guān)的消息和參數(shù)發(fā)送出去。然后在需要對(duì)Qcop信息進(jìn)行處理的地方定義好接收管道,同時(shí)再定義相關(guān)的消息(message)處理函數(shù),根據(jù)發(fā)送過(guò)來(lái)的不同的message進(jìn)行不同的處理。而信號(hào)(signal)-槽(slot)機(jī)制則是指一種高級(jí)接口,應(yīng)用于C++的對(duì)象之間的通信,他取代了很多GUI工具包中的回調(diào)函數(shù),分別由以下步驟實(shí)現(xiàn):

(1)當(dāng)對(duì)象改變狀態(tài)時(shí),相應(yīng)的信號(hào)(signal)由該對(duì)象發(fā)射(emit)出去;
(2)而槽(slot)是用來(lái)接收指定的signal的,他就是普通的對(duì)象成員函數(shù)。

當(dāng)signal發(fā)出的時(shí)候,不相關(guān)的組件不知道他代表什么,只有定義好的接收slot才能處理signal信息,從而做到了真正的信息封裝。通過(guò)專門的函數(shù)connect來(lái)指定接收signal的slot,而且signal和slot之間可以一對(duì)一,一對(duì)多,多對(duì)一,多對(duì)多,還可以signal觸發(fā)signal,非常的靈活和易用,對(duì)應(yīng)關(guān)系如圖1所示。

圖1 signal與slot的對(duì)應(yīng)關(guān)系

與在其他平臺(tái)上開發(fā)的輸入法模塊明顯不同的是,在Qtopia平臺(tái)上開發(fā)輸入法模塊充分利用了其內(nèi)部特殊的通信機(jī)制,尤其是信號(hào)-槽(signal-slot)機(jī)制,從而使輸入法的實(shí)現(xiàn)簡(jiǎn)潔明了。

2 軟鍵盤功能中各部分模塊的實(shí)現(xiàn)

現(xiàn)在準(zhǔn)備在Qtopia平臺(tái)上實(shí)現(xiàn)軟鍵盤的功能。代碼都是在PC上的Qtopia模擬器環(huán)境下做的編寫和修改。Qtopia模擬器是Trolltech公司提供的輔助開發(fā)工具,用于在PC上模擬出手機(jī)開發(fā)板上的開發(fā)情況,方便Qtopia工程師進(jìn)行代碼修改和調(diào)試。而最后的調(diào)試則是在debug板上進(jìn)行的,通過(guò)看實(shí)際的效果,有助于發(fā)現(xiàn)一些在模擬器上容易忽略的問(wèn)題。為了簡(jiǎn)化敘述手段,將可能提到的調(diào)用函數(shù)的形參全部省去,如emit key(int unicode,int scancode,int mode,bool press,bool repeat)省略為emitkey(),具體的函數(shù)調(diào)用實(shí)現(xiàn)請(qǐng)參閱QT的幫助手冊(cè)。

項(xiàng)目計(jì)劃總共要實(shí)現(xiàn)拼音,英文和符號(hào)輸入法鍵盤共3個(gè)模塊,現(xiàn)在重點(diǎn)描述最具有代表性的拼音輸入法鍵盤的實(shí)現(xiàn)。其鍵盤草圖如圖2所示。

圖2 拼音輸入法鍵盤草圖

下方的軟鍵盤即是輸入按鈕所在的地方,上方2條選擇欄分別是輸入的拼音顯示欄和與拼音對(duì)應(yīng)的漢字候選欄。要完成這個(gè)鍵盤必須實(shí)現(xiàn)如下幾個(gè)模塊:

拼音輸入法引擎模塊 用來(lái)實(shí)現(xiàn)與拼音匹配的漢字。
智能匹配模塊 搜尋與輸入拼音相接近的漢字以及聯(lián)想的詞組。
漢字選擇欄 顯示模塊顯示對(duì)應(yīng)的漢字。
拼音輸入欄 顯示模塊顯示輸入的拼音。
軟鍵盤輸入界面模塊 接收用戶的輸入,轉(zhuǎn)給Qtopia系統(tǒng)。

拼音輸入法引擎模塊直接購(gòu)買了第三方廠商的產(chǎn)品,智能匹配模塊則是隨著引擎一起購(gòu)買而來(lái)的,但是由于廠商開放了模塊的源代碼,在實(shí)現(xiàn)的時(shí)候按照客戶的需要做了一些小小的改動(dòng),如調(diào)整了一些原來(lái)匹配字符順序的不合理,提高了某些字符的優(yōu)先級(jí)等。

漢字選擇欄模塊類picksboard.cpp和拼音顯示欄模塊類pickboardPY.cpp都繼承自QT中的Qframe類,在確定選擇欄的尺寸之后,采用輸入法引擎模塊的字符顯示接口, 即可以正確地顯示需要選擇的字符。

輸入法界面模塊是重點(diǎn)要解決的模塊,于是先初始化鍵盤類keyboardconfig.cpp,這個(gè)類繼承自QT 中的Qobject類 然后在調(diào)用軟鍵盤的時(shí)候使用qtopia中的繪圖函數(shù)drawLine()和setPen()畫出一個(gè)軟鍵盤。然后需要達(dá)到的目標(biāo)是:在軟鍵盤上點(diǎn)擊所見的字符后,能正確地顯示字符;點(diǎn)擊軟鍵盤上的某個(gè)按鈕后需要有按鈕反白,給使用者視覺(jué)上以按下按鍵的效果。

實(shí)現(xiàn)原理是在Qtopia中提供了一個(gè)key()信號(hào)。根據(jù)前面說(shuō)過(guò)的信號(hào)-槽(signal-slot)機(jī)制,在點(diǎn)擊軟鍵盤按鍵時(shí),發(fā)送相應(yīng)的帶參數(shù)的key()信號(hào)給Qtopia系統(tǒng),即emitkey(unicode,scancode,mode,true,false),Qtopia系統(tǒng)中有專門的接收key()信號(hào)的槽來(lái)根據(jù)參數(shù)unicode,作為字符的惟一識(shí)別標(biāo)志,在對(duì)應(yīng)的unicode表中尋找對(duì)應(yīng)的字符,顯示在屏幕上即可,十分簡(jiǎn)單高效。

按鍵反白的效果采用了在按下按鍵時(shí)對(duì)鍵盤進(jìn)行重繪,將按下的那個(gè)按鍵區(qū)域填涂上反白的顏色,而放開按鍵的時(shí)候再次對(duì)鍵盤進(jìn)行重繪,將按鍵區(qū)域填涂上原鍵盤的顏色。即按照如下的一個(gè)流程:初始化一繪制軟鍵盤(彈出軟鍵盤)一點(diǎn)擊觸摸屏一重繪軟鍵盤(按鍵反白顯示)一釋放觸摸屏一再次重繪軟鍵盤(軟鍵盤正常顯示)。

3 組合模塊,軟鍵盤的實(shí)現(xiàn)

軟鍵盤的實(shí)現(xiàn)流程如圖3所示。

圖3 軟鍵盤實(shí)現(xiàn)流程圖

現(xiàn)在前期的準(zhǔn)備工作都已經(jīng)完成,應(yīng)該在合適的位置組成軟鍵盤。在Qtopia模擬器的顯示屏上,為了不與其他控件產(chǎn)生沖突,也為了選擇欄和軟鍵盤的相對(duì)位置有個(gè)根據(jù)的基準(zhǔn),還需要專門為軟鍵盤的顯示設(shè)置一個(gè)容器(container)。因此再寫出一個(gè)類keyboardContainer.cpp,每次在彈出軟鍵盤之前,先初始化和彈出container,然后選擇欄和軟鍵盤的顯示就以這個(gè)容器的顯示位置為依據(jù),從而顯示在正確的位置上,這樣處理還有一個(gè)好處就是:要調(diào)整整個(gè)軟件盤的位置,只要調(diào)整容器的位置即可,而不用去改動(dòng)其他代碼。

于是在完成keyboardContainer.cpp類之后,將選擇欄和軟鍵盤在容器里的正確位置顯示,然后將容器在整個(gè)Qtopia模擬器上的正確位置顯示即可,經(jīng)過(guò)測(cè)試,可以達(dá)到目的。

4 軟鍵盤實(shí)現(xiàn)策略的改進(jìn)和優(yōu)化

將代碼下載到debug板上進(jìn)行調(diào)試時(shí),發(fā)現(xiàn)在軟鍵盤彈出時(shí)有比較明顯的刷新遲滯和閃爍現(xiàn)象,不能達(dá)到彈出和反白顯示正常的要求。經(jīng)過(guò)跟蹤和分析,以及對(duì)調(diào)試板性能的估計(jì),發(fā)現(xiàn)原因在于:采用ARM 架構(gòu)的debug板上的CPU主頻較低,無(wú)法很順暢地即時(shí)重繪軟鍵盤,而在模擬器上調(diào)試時(shí),由于PC的CPU頻率較高,則不影響軟鍵盤的重繪。

解決問(wèn)題的關(guān)鍵在于提高重繪鍵盤的速度。于是考慮用貼圖來(lái)代替重繪,實(shí)現(xiàn)策略是將軟鍵盤圖片先保存在內(nèi)存中,在需要的時(shí)候直接調(diào)用內(nèi)存中的圖片,這樣就省去了重繪的時(shí)間,可以大大提高速度。按鍵反白效果的顯示,也是用反白顏色的按鍵小圖片來(lái)代替對(duì)按下鍵的填涂顏色,同樣不需要對(duì)鍵盤進(jìn)行重繪。經(jīng)過(guò)計(jì)算,圖片占用內(nèi)存約100 kB,對(duì)于智能手機(jī)上64 MB左右的內(nèi)存大小來(lái)說(shuō),完全承受得起。Qtopia中也提供了bitBlt()函數(shù)來(lái)將內(nèi)存中的圖片直接顯示在屏幕上。

還有一點(diǎn)要注意,由于初始化圖片的數(shù)量比較多,會(huì)影響開機(jī)的速度,可以將初始化圖片的時(shí)間推后,考慮到一般用戶使用軟鍵盤的習(xí)慣,將初始化圖片的時(shí)間定在完全開機(jī)后的1~3 s是可行的。用Qtopia中的定時(shí)器類函數(shù)可以順利地實(shí)現(xiàn)這一點(diǎn)。在優(yōu)化之后,再次將代碼下載到debug板上,經(jīng)過(guò)測(cè)試,發(fā)現(xiàn)鍵盤的彈出和反白顯示都沒(méi)有停滯感,功能也可以完全實(shí)現(xiàn),從而順利地完成了Qtopia上的拼音輸入法軟鍵盤模塊的實(shí)現(xiàn)。

5 結(jié)語(yǔ)

在現(xiàn)在的手機(jī)開發(fā)中,第三方廠商所能提供的支持越來(lái)越多,但是在任何一款新手機(jī)的開發(fā)里,輸入法模塊的實(shí)現(xiàn)都是必須自行開發(fā)的。Qtopia提供了大量靈活的函數(shù),在嵌入式系統(tǒng)這個(gè)內(nèi)存小,CPU主頻相對(duì)較低的特殊環(huán)境下,為順利實(shí)現(xiàn)模塊功能提供了很大的選擇余地。因此,這個(gè)Qtopia平臺(tái)上輸入法模塊實(shí)現(xiàn)的例子有嵌入式開發(fā)人員可以借鑒的地方,同時(shí)也說(shuō)明了Qtopia平臺(tái)以他優(yōu)良的擴(kuò)展性能,一定能夠在競(jìng)爭(zhēng)激烈的手機(jī)開發(fā)平臺(tái)市場(chǎng)中占有自己的一席之地。


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉