隨著對嵌入式系統(tǒng)體積小型化和操作人性化的要求,,以及大尺寸觸摸式顯示屏的廣泛應(yīng)用,,在嵌入式系統(tǒng)中采用軟鍵盤實現(xiàn)字符的輸入,已經(jīng)成為目前的發(fā)展主流,。QT是一個跨平臺的C++圖形界面庫,,是由挪威TrollTech公司推出的產(chǎn)品。它采用的是面向?qū)ο蟮某绦蛟O(shè)計思想,,因此,,具有良好的可擴(kuò)展性和可移植性,同時支持多個GUI平臺的交互開發(fā),。QT采用了良好的封裝機(jī)制,,使得它的模塊化程度非常高,可重用性好,,開發(fā)方便,。憑借其良好的性能,QT已成為目前GUI開發(fā)中使用最為廣泛的圖形界面庫之一,。QT/E(QT/Embedded)是用于嵌入式系統(tǒng)的QT版本,。QT/E去掉了對XLib的依賴而直接工作于Frame Buffer上,因而效率更高,,文中主要使用QT4.5.3版本,,在嵌入式Linux環(huán)境下實現(xiàn)軟鍵盤設(shè)計。
1 QT/E體系結(jié)構(gòu)
QT/E是2001年Trolltech公司開發(fā)的一款面向嵌入式系統(tǒng)的QT版本,。它采用輕量級窗口系統(tǒng),,完全摒棄了底層的XLib,以Framebuffer作為底層圖形接口,,極大地減少了對內(nèi)存的消耗,。QT/E在上層仍然保持著原來的QT架構(gòu),,因此,針對在Xwindow上設(shè)計的QT程序仍然具有很好的移植性,。QT/E的基本體系結(jié)構(gòu)如圖1所示。
1)QT/E體系結(jié)構(gòu)中的圖形引擎是通過相關(guān)的圖形算法和Framebuffer操作底層的硬件設(shè)備來實現(xiàn)的,;事件驅(qū)動則是通過底層的輸入輸出設(shè)備驅(qū)動來實現(xiàn)對外界事件的響應(yīng),。
2)如圖1所示,由圖形引擎層實現(xiàn)對圖形界面的繪圖操作,,然后由QT基本類提供對外界的操作接口,。其中,圖形類提供圖形操作接口,,比如:畫線,、畫矩形等;控件類通過繼承公共抽象類QWidget來實現(xiàn)基本的控件,,為外界提供接口,。
2 QT/E通信機(jī)制
在圖形界面編程時,我們經(jīng)常要實現(xiàn)界面之間的相互切換或者相互通知,,更具體的來說就是需要實現(xiàn)類與類之間的相互通信,。比如,在軟鍵盤的設(shè)計中,,當(dāng)一個事件產(chǎn)生時,,系統(tǒng)就會發(fā)出一個信號。信號和槽(Signal&slot)機(jī)制是QT的核心特征,,在QT庫中有很多已經(jīng)設(shè)置好的信號,,比如:clicked()、triggered()等,,開發(fā)人員也可以根據(jù)需要來自定義某些信號,。事件的響應(yīng)對應(yīng)著QT窗口里的槽函數(shù),和信號類似,,系統(tǒng)有很多預(yù)定義的槽,,比如exit()、quit()等,,用戶也可以根據(jù)需要來添加自己的槽函數(shù),。
當(dāng)對象改變其狀態(tài)時,信號就由該對象發(fā)射(emit)出去,,這就是對象所要做的全部事情,,它不知道另一端是誰在接收這個信號。這就是真正的信息封裝,,它確保對象被當(dāng)作一個真正的軟件組件來使用,。槽用于接收信號,,但它們是普通的對象成員函數(shù)。一個槽并不知道是否有任何信號與自己相連接,。而且,,對象并不了解具體的通信機(jī)制??梢詫⒑芏嘈盘柵c單個槽進(jìn)行連接,,也可以將單個信號與很多槽進(jìn)行連接,甚至于將一個信號與另外一個信號相連接也是可能的,。
因此,,整個QT窗口的設(shè)計簡單、靈活且擴(kuò)展性好,。信號與槽之間的鏈接一般用connect()函數(shù)來實現(xiàn),,具體關(guān)聯(lián)方式和實現(xiàn)函數(shù)如圖2所示:
3 基于QT/E軟鍵盤的實現(xiàn)
文中主要根據(jù)項目的實際需要,在軟鍵盤上制定了數(shù)字鍵,、字母鍵,、退出鍵和確定鍵。具體分兩步實現(xiàn),,第一步:在基于linux環(huán)境的PC機(jī)上制定軟鍵盤,,并編寫代碼實現(xiàn)其按鍵功能;第二步:生成能夠在ARM板上運行的代碼,,并移植到ARM板上,。
3.1 PC機(jī)x11環(huán)境下制定軟鍵盤的模型
根據(jù)項目的實際需求,在PC機(jī)x11/QT環(huán)境下設(shè)計了軟鍵盤界面,,該軟鍵盤具有數(shù)字鍵,、字母鍵、退出鍵和確定鍵,,總共42個按鍵,,如圖3所示。在linux環(huán)境的QT designer下,,創(chuàng)建新的widget,,然后根據(jù)項目中所需要的按鍵個數(shù)來確定軟鍵盤的大小,在此,,選擇軟鍵盤的外框大小為:540x160,。軟鍵盤外框搭建完成之后,需要在軟鍵盤區(qū)域內(nèi)加入實際所需要的按鍵,。將Widget Box下Buttons選項中的PushButton按鍵拖入到軟鍵盤區(qū)域內(nèi),,在PushButton按鍵屬性的文本編輯中填入按鍵值,比如“1”,。在PushButton按鍵屬性的名字編輯中填入按鍵名,,比如“n1”,。
同理,在軟鍵盤區(qū)域內(nèi)拖入實際所需要按鍵個數(shù)的按鍵,,根據(jù)所需要的鍵值修改每個按鍵上面的文本屬性和名字屬性,。按照一般鍵盤的布局對它們進(jìn)行排列
3.2 軟鍵盤實現(xiàn)
如圖3所示,首先建立了足項目要求的軟鍵盤的基本模型,,接下來要實現(xiàn)的就是當(dāng)按鍵響應(yīng)時能夠讀出鍵盤值并將其發(fā)送出去,,具體實現(xiàn)的流程如圖4所示。
圖4中,,初始化按鍵時,,可以使用QSignalMapper類來捆綁不同按鍵所發(fā)送的一系列無參數(shù)信號,,并將其轉(zhuǎn)發(fā)為有參數(shù)的信號:
QSignalMapper*mapper=new QSignalMapper(this),;
QSignalMapper的主要應(yīng)用為可以實現(xiàn)一個函數(shù)響應(yīng)不同按鈕的功能,下面舉例來說明圖4的具體實現(xiàn)過程:
首先設(shè)置軟鍵盤界面名稱為ui,,然后以數(shù)字鍵“1”為例:將在圖3中數(shù)字鍵1對應(yīng)的按鍵名稱設(shè)為:n1,,在圖4中的第(1)步中,建立鍵值“1”所對應(yīng)的映射,,代碼如下:
mapper->setMapping(ui.n1,,“1”);
接著,,在圖4中的第(2)步,,需要建立鍵值clicked對應(yīng)的信號與槽之間的關(guān)系代碼如下:
connect(ui.n1,SIGNAL(clicked()),,mapper,,SLOT(map()));
最后,,將所需要用到的字母或者數(shù)字通過上述方式連接到槽函數(shù)中,。如圖4中的(3),將這些所要求得到的字母或者數(shù)字發(fā)送給焦點控件,,代碼如下:
connect(mapper,,signal(mapped(const QString&)),im,,slot(sendcontent(const QStling&)))
上面語句中sendcontent()函數(shù)為發(fā)射子函數(shù),,具體代碼如下:
sendCommitString(content); (1)
content.clear(),; (2)
語句(1)將焦點控件內(nèi)的字母和數(shù)字發(fā)送出去,,語句(2)清除發(fā)送框中的字母和數(shù)字,供下一次使用,。
可以采用同樣的方式,,對軟鍵盤中其它的按鍵進(jìn)行映射函數(shù)和連接函數(shù)的編寫,,然后在arm-linux-gcc環(huán)境下編譯,生成可以在arm板上運行的二進(jìn)制文件,。
3.3 下載到目標(biāo)板上運行
本文的設(shè)計思路是:先將程序代碼在PC機(jī)上調(diào)試通過,,然后將調(diào)試通過的程序代碼在RAM-linux-gcc環(huán)境下進(jìn)行編譯,生成可以在RAM板上運行的二進(jìn)制文件,,最后將此二進(jìn)制文件下載到目標(biāo)板中,。本文的前提是QT4.5.3環(huán)境已經(jīng)移植到開發(fā)板上,具體移植步驟在這里不作介紹,。在終端上面,,運行啟動軟鍵盤指令,命令行后面加上“-qws”指令,,運行結(jié)果如圖5所示,。
圖5是在實際項目中需要的預(yù)設(shè)手機(jī)號碼的界面,在系統(tǒng)運行前要先設(shè)置手機(jī)號碼,,以便系統(tǒng)故障時能夠自動的給對應(yīng)的手機(jī)用戶發(fā)送預(yù)警信息,,使用戶能夠?qū)崟r的了解自己系統(tǒng)的運行狀態(tài)。在該界面中,,準(zhǔn)備預(yù)設(shè)手機(jī)號碼時,,直接選擇打開軟鍵盤按鈕,圖3所示的預(yù)制的軟鍵盤會彈出界面,,選擇要求預(yù)設(shè)的手機(jī)號碼值,,完成之后選擇exit按鍵,軟鍵盤關(guān)閉,。在此就可以用圖5所示的軟鍵盤完成手機(jī)號碼的預(yù)設(shè),。
4 結(jié)束語
隨著Linux操作系統(tǒng)的廣泛應(yīng)用以及人們對GUI人機(jī)交互界面的更多需求,本文在linux操作系統(tǒng)的QT開發(fā)套件下,,分析了軟鍵盤實現(xiàn)的原理,,并完成了軟鍵盤的設(shè)計。此軟件盤可以根據(jù)用戶的要求來添加按鍵,,與外部接入實體鍵盤相比,,不僅便利,還節(jié)約成本,。通過實踐證明此軟鍵盤具有較強(qiáng)的實時性和可靠性,,可以廣泛的應(yīng)用于各種QT界面中。