隨著對嵌入式系統體積小型化和操作人性化的要求,以及大尺寸觸控式顯示屏的廣泛應用,在嵌入式系統中採用軟鍵盤實現字元的輸入,已經成為目前的發展主流。qt是乙個跨平台的c++圖形介面庫,是由挪威trolltech公司推出的產品。它採用的是物件導向的程式設計思想,因此,具有良好的可擴充套件性和可移植性,同時支援多個gui平台的互動開發。qt採用了良好的封裝機制,使得它的模組化程度非常高,可重用性好,開發方便。憑藉其良好的效能,qt已成為目前gui開發中使用最為廣泛的圖形介面庫之一。qt/e(qt/embedded)是用於嵌入式系統的qt版本。qt/e去掉了對xlib的依賴而直接工作於frame buffer上,因而效率更高,文中主要使用qt4.5.3版本,在嵌入式linux環境下實現軟鍵盤設計。
1 qt/e體系結構
qt/e是2023年trolltech公司開發的一款面向嵌入式系統的qt版本。它採用輕量級視窗系統,完全摒棄了底層的xlib,以framebuffer作為底層圖形介面,極大地減少了對記憶體的消耗。qt/e在上層仍然保持著原來的qt架構,因此,針對在xwindow上設計的qt程式仍然具有很好的移植性。qt/e的基本體系結構如圖1所示。
1)qt/e體系結構中的圖形引擎是通過相關的圖形演算法和framebuffer操作底層的硬體裝置來實現的;事件驅動則是通過底層的輸入輸出裝置驅動來實現對外界事件的響應。
2)如圖1所示,由圖形引擎層實現對圖形介面的繪圖操作,然後由qt基本類提供對外界的操作介面。其中,圖形類提供圖形操作介面,比如:畫線、畫矩形等;控制項類通過繼承公共抽象類qwidget來實現基本的控制項,為外界提供介面。
2 qt/e通訊機制
在圖形介面程式設計時,我們經常要實現介面之間的相互切換或者相互通知,更具體的來說就是需要實現類與類之間的相互通訊。比如,在軟鍵盤的設計中,當乙個事件產生時,系統就會發出乙個訊號。訊號和槽(signal&slot)機制是qt的核心特徵,在qt庫中有很多已經設定好的訊號,比如:clicked()、triggered()等,開發人員也可以根據需要來自定義某些訊號。事件的響應對應著qt視窗裡的槽函式,和訊號類似,系統有很多預定義的槽,比如exit()、quit()等,使用者也可以根據需要來新增自己的槽函式。
當物件改變其狀態時,訊號就由該物件發射(emit)出去,這就是物件所要做的全部事情,它不知道另一端是誰在接收這個訊號。這就是真正的資訊封裝,它確保物件被當作乙個真正的軟體元件來使用。槽用於接收訊號,但它們是普通的物件成員函式。乙個槽並不知道是否有任何訊號與自己相連線。而且,物件並不了解具體的通訊機制。可以將很多訊號與單個槽進行連線,也可以將單個訊號與很多槽進行連線,甚至於將乙個訊號與另外乙個訊號相連線也是可能的。
因此,整個qt視窗的設計簡單、靈活且擴充套件性好。訊號與槽之間的鏈結一般用connect()函式來實現,具體關聯方式和實現函式如圖2所示:
3 基於qt/e軟鍵盤的實現
文中主要根據專案的實際需要,在軟鍵盤上制定了數字鍵、字母鍵、退出鍵和確定鍵。具體分兩步實現,第一步:在基於linux環境的pc機上制定軟鍵盤,並編寫**實現其按鍵功能;第二步:生成能夠在arm板上執行的**,並移植到arm板上。
3.1 pc機x11環境下制定軟鍵盤的模型
根據專案的實際需求,在pc機x11/qt環境下設計了軟鍵盤介面,該軟鍵盤具有數字鍵、字母鍵、退出鍵和確定鍵,總共42個按鍵,如圖3所示。在linux環境的qt designer下,建立新的widget,然後根據專案中所需要的按鍵個數來確定軟鍵盤的大小,在此,選擇軟鍵盤的外框大小為:540x160。軟鍵盤外框搭建完成之後,需要在軟鍵盤區域內加入實際所需要的按鍵。將widget box下buttons選項中的pushbutton按鍵拖入到軟鍵盤區域內,在pushbutton按鍵屬性的文字編輯中填入按鍵值,比如「1」。在pushbutton按鍵屬性的名字編輯中填入按鍵名,比如「n1」。
同理,在軟鍵盤區域內拖入實際所需要按鍵個數的按鍵,根據所需要的鍵值修改每個按鍵上面的文字屬性和名字屬性。按照一般鍵盤的布局對它們進行排列
3.2 軟鍵盤實現
如圖3所示,首先建立了足專案要求的軟鍵盤的基本模型,接下來要實現的就是當按鍵響應時能夠讀出鍵盤值並將其傳送出去,具體實現的流程如圖4所示。
圖5是在實際專案中需要的預設手機號碼的介面,在系統執行前要先設定手機號碼,以便系統故障時能夠自動的給對應的手機使用者傳送預警資訊,使使用者能夠實時的了解自己系統的執行狀態。在該介面中,準備預設手機號碼時,直接選擇開啟軟鍵盤按鈕,圖3所示的預製的軟鍵盤會彈出介面,選擇要求預設的手機號碼值,完成之後選擇exit按鍵,軟鍵盤關閉。在此就可以用圖5所示的軟鍵盤完成手機號碼的預設。
4 結束語
隨著linux作業系統的廣泛應用以及人們對gui人機互動介面的更多需求,本文在linux作業系統的qt開發套件下,分析了軟鍵盤實現的原理,並完成了軟鍵盤的設計。此軟體盤可以根據使用者的要求來新增按鍵,與外部接入實體鍵盤相比,不僅便利,還節約成本。通過實踐證明此軟鍵盤具有較強的實時性和可靠性,可以廣泛的應用於各種qt介面中。
EditText和軟鍵盤
editext獲取焦點並自動彈出輸入鍵盤,如下 edittext edittext.setfocusable true edittext.setfocusableintouchmode true edittext.requestfocus inputmethodmanager inputmanage...
Android軟鍵盤的控制以及更改軟鍵盤
edittext是可編輯控制項,往往會為它新增監聽,在軟鍵盤上也會有行為。1 隱藏軟鍵盤 inputmethodmanager imm inputmethodmanager getsystemservice context.inputmethodservice imm.hidesoftinputfr...
顯示和隱藏軟鍵盤
1 方法一 如果輸入法在視窗上已經顯示,則隱藏,反之則顯示 inputmethodmanager imm inputmethodmanager getsystemservice context.input method service imm.togglesoftinput 0,inputmetho...