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