嵌入式Linux系統(tǒng)的軟鍵盤(pán)實(shí)現(xiàn)_第1頁(yè)
嵌入式Linux系統(tǒng)的軟鍵盤(pán)實(shí)現(xiàn)_第2頁(yè)
嵌入式Linux系統(tǒng)的軟鍵盤(pán)實(shí)現(xiàn)_第3頁(yè)
嵌入式Linux系統(tǒng)的軟鍵盤(pán)實(shí)現(xiàn)_第4頁(yè)
嵌入式Linux系統(tǒng)的軟鍵盤(pán)實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、嵌入式 Linux 系統(tǒng)的軟鍵盤(pán)實(shí)現(xiàn)隨著對(duì)嵌入式系統(tǒng)體積小型化和操作人性化的要求,以 及大尺寸觸摸式顯示屏的廣泛應(yīng)用,在嵌入式系統(tǒng)中采用軟 鍵盤(pán)實(shí)現(xiàn)字符的輸入,已經(jīng)成為目前的發(fā)展主流。 QT 是一 個(gè)跨平臺(tái)的 C+ 圖形界面庫(kù),是由挪威 TrollTech 公司推出的 產(chǎn)品。它采用的是面向?qū)ο蟮某绦蛟O(shè)計(jì)思想,因此,具有良 好的可擴(kuò)展性和可移植性, 同時(shí)支持多個(gè) GUI 平臺(tái)的交互開(kāi) 發(fā)。QT采用了良好的封裝機(jī)制,使得它的模塊化程度非常 高,可重用性好,開(kāi)發(fā)方便。憑借其良好的性能, QT 已成 為目前 GUI 開(kāi)發(fā)中使用最為廣泛的圖形界面庫(kù)之一。 QT/E(QT/Embedded)是用于嵌入式系

2、統(tǒng)的 QT版本。QT/E去掉 了對(duì) XLib 的依賴而直接工作于 FrameBuffer 上,因而效率更高,文中主要使用 QT4.5.3 版本,在 嵌入式 Linux 環(huán)境下實(shí)現(xiàn)軟鍵盤(pán)設(shè)計(jì)。1QT/E 體系結(jié)構(gòu)QT/E 是 2001 年 Trolltech 公司開(kāi)發(fā)的一款面向嵌入式系統(tǒng)的 QT 版本。它采用輕量級(jí)窗口系統(tǒng), 完全摒棄了底層的 XLib, 以 Framebuffer 作為底層圖形接口,極大地減少了對(duì)內(nèi)存的 消耗。 QT/E 在上層仍然保持著原來(lái)的 QT 架構(gòu),因此,針對(duì) 在 Xwindow 上設(shè)計(jì)的 QT 程序仍然具有很好的移植性。 QT/E 的基本體系結(jié)構(gòu)如圖 1 所示。1)

3、QT/E 體系結(jié)構(gòu)中的圖形引擎是通過(guò)相關(guān)的圖形算法和 Framebuffer 操作底層的硬件設(shè)備來(lái)實(shí)現(xiàn)的; 事件驅(qū)動(dòng)則是通 過(guò)底層的輸入輸出設(shè)備驅(qū)動(dòng)來(lái)實(shí)現(xiàn)對(duì)外界事件的響應(yīng)。2)如圖 1 所示,由圖形引擎層實(shí)現(xiàn)對(duì)圖形界面的繪圖操作, 然后由 QT 基本類提供對(duì)外界的操作接口。其中,圖形類提 供圖形操作接口,比如:畫(huà)線、畫(huà)矩形等;控件類通過(guò)繼承 公共抽象類 QWidget 來(lái)實(shí)現(xiàn)基本的控件,為外界提供接口 2 QT/E 通信機(jī)制在圖形界面編程時(shí),我們經(jīng)常要實(shí)現(xiàn)界面之間的相互切換或者相互通知,更具體的來(lái)說(shuō)就是需要實(shí)現(xiàn)類與類之間的相互 通信。比如,在軟鍵盤(pán)的設(shè)計(jì)中,當(dāng)一個(gè)事件產(chǎn)生時(shí),系統(tǒng) 就會(huì)發(fā)出一個(gè)

4、信號(hào)。 信號(hào)和槽 ( Signal&slot )機(jī)制是 QT 的核心特征,在 QT 庫(kù)中有很多已經(jīng)設(shè)置好的信號(hào),比如: clicked ()、 triggered ()等,開(kāi)發(fā)人員也可以根據(jù)需要來(lái)自 定義某些信號(hào)。事件的響應(yīng)對(duì)應(yīng)著 QT 窗口里的槽函數(shù),和 信號(hào)類似,系統(tǒng)有很多預(yù)定義的槽,比如exit ()、 quit ()等,用戶也可以根據(jù)需要來(lái)添加自己的槽函數(shù)。當(dāng)對(duì)象改變其狀態(tài)時(shí),信號(hào)就由該對(duì)象發(fā)射( emit )出去, 這就是對(duì)象所要做的全部事情,它不知道另一端是誰(shuí)在接收 這個(gè)信號(hào)。這就是真正的信息封裝,它確保對(duì)象被當(dāng)作一個(gè) 真正的軟件組件來(lái)使用。槽用于接收信號(hào),但它們是普通的

5、對(duì)象成員函數(shù)。一個(gè)槽并不知道是否有任何信號(hào)與自己相連 接。而且,對(duì)象并不了解具體的通信機(jī)制??梢詫⒑芏嘈盘?hào) 與單個(gè)槽進(jìn)行連接,也可以將單個(gè)信號(hào)與很多槽進(jìn)行連接, 甚至于將一個(gè)信號(hào)與另外一個(gè)信號(hào)相連接也是可能的。因此,整個(gè) QT 窗口的設(shè)計(jì)簡(jiǎn)單、靈活且擴(kuò)展性好。信號(hào)與槽之間的鏈接一般用connect ()函數(shù)來(lái)實(shí)現(xiàn),具體關(guān)聯(lián)方式和實(shí)現(xiàn)函數(shù)如圖 2 所示:3 基于 QT/E 軟鍵盤(pán)的實(shí)現(xiàn)文中主要根據(jù)項(xiàng)目的實(shí)際需要,在軟鍵盤(pán)上制定了數(shù)字鍵、 字母鍵、退出鍵和確定鍵。具體分兩步實(shí)現(xiàn),第一步:在基 于 linux 環(huán)境的 PC 機(jī)上制定軟鍵盤(pán), 并編寫(xiě)代碼實(shí)現(xiàn)其按鍵 功能;第二步:生成能夠在 ARM 板

6、上運(yùn)行的代碼,并移植 到 arm 板上。3.1 PC 機(jī) x11 環(huán)境下制定軟鍵盤(pán)的模型根據(jù)項(xiàng)目的實(shí)際需求, 在 PC 機(jī) x11/QT 環(huán)境下設(shè)計(jì)了軟鍵盤(pán) 界面,該軟鍵盤(pán)具有數(shù)字鍵、字母鍵、退出鍵和確定鍵,總 共 42 個(gè)按鍵,如圖 3 所示。在 linux 環(huán)境的 QT designer下,創(chuàng)建新的 widget,然后根據(jù)項(xiàng)目中所需要的按鍵 個(gè)數(shù)來(lái)確定軟鍵盤(pán)的大小, 在此,選擇軟鍵盤(pán)的外框大小為: 540x160. 軟鍵盤(pán)外框搭建完成之后,需要在軟鍵盤(pán)區(qū)域內(nèi)加入實(shí)際所需要的按鍵。將 WidgetBox 下 Buttons 選項(xiàng)中的 PushButton 按鍵拖入到軟鍵盤(pán)區(qū)域 內(nèi),在 Pus

7、hButton 按鍵屬性的文本編輯中填入按鍵值,比如 1.在 PushButton 按鍵屬性的名字編輯中填入按鍵名,比如同理,在軟鍵盤(pán)區(qū)域內(nèi)拖入實(shí)際所需要按鍵個(gè)數(shù)的按 鍵,根據(jù)所需要的鍵值修改每個(gè)按鍵上面的文本屬性和名字 屬性。按照一般鍵盤(pán)的布局對(duì)它們進(jìn)行排列 3.2 軟鍵盤(pán)實(shí)現(xiàn)如圖 3 所示,首先建立了足項(xiàng)目要求的軟鍵盤(pán)的基本模型, 接下來(lái)要實(shí)現(xiàn)的就是當(dāng)按鍵響應(yīng)時(shí)能夠讀出鍵盤(pán)值并將其 發(fā)送出去,具體實(shí)現(xiàn)的流程如圖 4 所示。圖 4 中,初始化按鍵時(shí),可以使用 QSignalMapper 類來(lái) 捆綁不同按鍵所發(fā)送的一系列無(wú)參數(shù)信號(hào),并將其轉(zhuǎn)發(fā)為有 參數(shù)的信號(hào):QSignalMapper 的主要

8、應(yīng)用為可以實(shí)現(xiàn)一個(gè)函數(shù)響應(yīng)不同按 鈕的功能,下面舉例來(lái)說(shuō)明圖 4 的具體實(shí)現(xiàn)過(guò)程:首先設(shè)置軟鍵盤(pán)界面名稱為ui,然后以數(shù)字鍵1為例:將在圖3中數(shù)字鍵1對(duì)應(yīng)的按鍵名稱設(shè)為:n1,在圖4中的第(1) 步中,建立鍵值 1 所對(duì)應(yīng)的映射,代碼如下:mapper->setMapping (ui.n1,1 );接著,在圖 4 中的第( 2)步,需要建立鍵值 clicked 對(duì)應(yīng)的 信號(hào)與槽之間的關(guān)系代碼如下:con nect ( u i.n 1 ,SIGNAL ( clicked ( ) ) , mapper,SLOT ( map();最后,將所需要用到的字母或者數(shù)字通過(guò)上述方式連接到槽 函數(shù)中。如

9、圖 4中的( 3),將這些所要求得到的字母或者數(shù) 字發(fā)送給焦點(diǎn)控件,代碼如下:connect( mapper,signal( mapped( constQString& ),im,slot( sendconten(t const QStling& )上面語(yǔ)句中sendcontent ()函數(shù)為發(fā)射子函數(shù),具體代碼如 下:sendCommitString(content);( 1 )content.clear();( 2)語(yǔ)句( 1)將焦點(diǎn)控件內(nèi)的字母和數(shù)字發(fā)送出去,語(yǔ)句(2)清除發(fā)送框中的字母和數(shù)字,供下一次使用??梢圆捎猛瑯拥姆绞?,對(duì)軟鍵盤(pán)中其它的按鍵進(jìn)行映射函數(shù) 和連接函數(shù)

10、的編寫(xiě),然后在 arm-linux-gcc 環(huán)境下編譯,生成 可以在 arm 板上運(yùn)行的二進(jìn)制文件。 3.3 下載到目標(biāo)板上運(yùn) 行本文的設(shè)計(jì)思路是:先將程序代碼在 PC 機(jī)上調(diào)試通過(guò),然 后將調(diào)試通過(guò)的程序代碼在 RAM-linux-gcc 環(huán)境下進(jìn)行編 譯,生成可以在 RAM 板上運(yùn)行的二進(jìn)制文件,最后將此二 進(jìn)制文件下載到目標(biāo)板中。本文的前提是 QT4.5.3 環(huán)境已經(jīng) 移植到開(kāi)發(fā)板上,具體移植步驟在這里不作介紹。在終端上 面,運(yùn)行啟動(dòng)軟鍵盤(pán)指令,命令行后面加上 -qws 指令,運(yùn) 行結(jié)果如圖 5 所示。圖 5 是在實(shí)際項(xiàng)目中需要的預(yù)設(shè)手機(jī)號(hào)碼的界面,在系統(tǒng)運(yùn) 行前要先設(shè)置手機(jī)號(hào)碼,以便系統(tǒng)故障時(shí)能夠自動(dòng)的給對(duì)應(yīng) 的手機(jī)用戶發(fā)送預(yù)警信息,使用戶能夠?qū)崟r(shí)的了解自己系統(tǒng)的運(yùn)行狀態(tài)。在該界面中,準(zhǔn)備預(yù)設(shè)手機(jī)號(hào)碼時(shí),直接選擇 打開(kāi)軟鍵盤(pán)按鈕,圖 3 所示的預(yù)制的軟鍵盤(pán)會(huì)彈出界面,選 擇要求預(yù)設(shè)的手機(jī)號(hào)碼值,完成之后選擇 exit 按鍵,軟鍵盤(pán) 關(guān)閉。在此就可以用圖 5 所示的軟鍵盤(pán)完成手機(jī)號(hào)碼的預(yù)設(shè)。4 結(jié)束語(yǔ)隨著 Linux 操作系

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論