<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于嵌入式 Qt 的車(chē)載 GUI 平臺的設計

基于嵌入式 Qt 的車(chē)載 GUI 平臺的設計

作者: 時(shí)間:2009-04-21 來(lái)源:網(wǎng)絡(luò ) 收藏

  1 引言

  隨著(zhù)經(jīng)濟社會(huì )的不斷發(fā)展汽車(chē)已進(jìn)入普通家庭,汽車(chē)用戶(hù)對車(chē)載娛樂(lè )系統的要求不斷地提高,希望汽車(chē)載娛樂(lè )系統的功能更加強大娛樂(lè )設施更加完美。(Graphical User InteRFace)可以滿(mǎn)足用戶(hù)需求,人機交互好,作為車(chē)載娛樂(lè )系統中人機交互界面的開(kāi)發(fā)平臺,對整個(gè)系統的設計起著(zhù)決定性作用,越來(lái)越受到開(kāi)發(fā)者的青睞。目前比較流行的平臺有Qt/Embedded、緊縮的X Windows系統、MicroWindows以及Mini系統。

  X Window系統是一個(gè)基于客戶(hù)/服務(wù)器(Client/Server)結構的視窗系統,基于X的終端(服務(wù)器)上顯示出來(lái)。此系統配置在大多數的UNIX系統、DEC的VAX/VMS操作系統以及Linux系統中,可以自由拷貝以及傳播,但是系統龐大,占用內核資源較多。MicroWindows是一個(gè)完全開(kāi)放源碼、分層設計的經(jīng)典GUI系統,可以替代X Window系統,但是某些關(guān)鍵性代碼使用了匯編語(yǔ)言。MiniGUI系統適應于中小型企業(yè)的GUI平臺,采用分層結構,并在核心層采用hash表的方式。本文采用的Qt/Embedded也是分層體系結構,在功能提供方面采用C++類(lèi)方式。

  2 GUI的實(shí)現平臺

  GUI是圖形用戶(hù)接口,一般用于PC機上人機交互界面的設計。而對于嵌入式GUI來(lái)說(shuō),由于嵌入式設備對資源的要求很?chē)栏?,不同的嵌入式設備需要定制不同的嵌入式系統,那么對GUI的要求也就不一樣,因此,對于不同的嵌入式系統來(lái)說(shuō)GUI也必須是可定制的。對于嵌入式的硬件來(lái)說(shuō),要求定制的嵌入式GUI應具有輕型、占用資源少、性能高、可靠性高、可配置等特點(diǎn)。由于Linux操作系統具有源碼公開(kāi)性、可移植性、可裁剪性和靈活性等優(yōu)點(diǎn),所以嵌入式GUI的開(kāi)發(fā)常在Linux環(huán)境下進(jìn)行。

  Qt/Embedded是著(zhù)名的Qt庫開(kāi)發(fā)商正在進(jìn)行的面向嵌入式系統的Qt版本。它是專(zhuān)門(mén)為嵌入式系統設計圖形用戶(hù)界面的工具包,包括一個(gè)完整的窗口系統。它的特點(diǎn)是可移植性比較好,設計者能輕易的加入各種顯示設備和硬件輸入設備,很多基于Qt的XWindow都可以非常方便的移植到嵌入式版本。

  Qt/Embedded為開(kāi)發(fā)者提供了豐富的API調用功能,并公開(kāi)源代碼。Qt/Embedded提供了非常豐富的窗口小部件(Widgets),并且還支持窗口部件的定制,因此它可以為用戶(hù)提供漂亮的圖形界面,但同時(shí)豐富的窗口對象也增大了軟件的體積,所以,Qt/Embedded一般用于對運行環(huán)境不太苛刻的嵌入式設備中。

  3 嵌入式Qt系統的特點(diǎn)

  Qt/Embedded移植了大量的原來(lái)基于Qt的XWindows程序,并提供了非常完整的嵌入式GUI解決方案,是一個(gè)成熟的GUI平臺,具有如下特點(diǎn):

  (1)Qt遵循GPL協(xié)議,開(kāi)放主要的源代碼,用戶(hù)可以在GPL的規定下自由添加新特性。

  (2)與其他嵌入式GUI相比,嵌入式Qt不僅是一個(gè)完整的窗口系統,而且也是一個(gè)應用程序框架,這更有利于應用程序的開(kāi)發(fā)。

  (3)Qt具有豐富的API,包括多達250個(gè)以上的C++類(lèi),支持諸如對圖形、網(wǎng)絡(luò )、數據庫、I/O操作、各種控件和XMI等眾多功能,可滿(mǎn)足大多數嵌入式應用系統開(kāi)發(fā)的需要。

  (4)Qt是一個(gè)GUI仿真工具包,它使用各自平臺上的低級繪圖函數仿真MS Windows和Motif(商用Llnix的標準GUI庫),因此程序運行速度快。

  (5)Qt良好的封裝機制使得Qt的模塊化程度非常高,可靠性好,易于程序開(kāi)發(fā)。

  基于Qt的這些特點(diǎn),在本車(chē)載嵌入式娛樂(lè )系統的開(kāi)發(fā)過(guò)程中,本文采用了嵌入式Qt作為圖形用戶(hù)界面開(kāi)發(fā)的GUl支持平臺,有效提高了應用程序的開(kāi)發(fā)速度。

  4 基于嵌入式Qt的車(chē)載GUI的設計

  4.1 基于嵌入式Qt的車(chē)載GUI的總體設計

  基于Linux的車(chē)載娛樂(lè )系統運行環(huán)境如表l所示,底層由Linux內核和驅動(dòng)程序構成。該內核是經(jīng)過(guò)裁減過(guò)的嵌入式Linux2.4,其中包括電源管理系統;驅動(dòng)程序提供對各種接口硬件的支持;中間層是基于/Embedded的嵌入式Qt庫。它精簡(jiǎn)和優(yōu)化了各種圖形操作,程序運行時(shí)無(wú)需額外系統的支持,可以有效減少內存消耗和CPU負擔。/Embedded本身是可擴展的,并能不斷地升級。開(kāi)發(fā)人員可以根據自己所面對的嵌入式設備的實(shí)際需要,對其進(jìn)行適當的裁減,經(jīng)過(guò)裁減所得到的/Embedded可以大約節約800k到3MB的內存空間,這樣也就意味著(zhù)用Qt開(kāi)發(fā)比用其他工具包開(kāi)發(fā)相同的應用程序,在生成可執行文件后,代碼所占用的內存空間要小。最頂層是整個(gè)車(chē)載娛樂(lè )應用系統,它是實(shí)現車(chē)載娛樂(lè )具體功能的應用集合。

基于Linux的車(chē)載娛樂(lè

  基于嵌入式Qt的車(chē)載嵌入式娛樂(lè )系統軟件,最大限度的滿(mǎn)足了車(chē)載視聽(tīng)娛樂(lè )的要求。提供視頻播放、音頻播放等多媒體軟件,個(gè)人信息管理軟件,無(wú)線(xiàn)網(wǎng)絡(luò )服務(wù)等。其系統架構如圖l所示。

基于嵌入式Qt的多媒體處理軟件構架

  4.2 基于嵌入式Qt的窗口系統結構設計

  本文設計的上層GUI窗口系統采用了客戶(hù)/服務(wù)器系統結構。該窗口系統包括:一個(gè)服務(wù)器進(jìn)程、一個(gè)或者多個(gè)客戶(hù)進(jìn)程。服務(wù)器負責為客戶(hù)和本身分配顯示區域,生成鼠標、鍵盤(pán)或者觸摸屏事件,它通常包含那些啟動(dòng)客戶(hù)的用戶(hù)界面。而客戶(hù)則通過(guò)與服務(wù)器通信來(lái)申請顯示區域,接受鼠標或觸摸屏事件??蛻?hù)可以直接訪(fǎng)問(wèn)所分配的顯示區域,以便為用戶(hù)提供GUI服務(wù)。服務(wù)器和客戶(hù)通過(guò)共享內存的方式來(lái)傳遞所分配顯示區域上的信息。窗口系統體系結構如圖2所示。

窗口系統體系結構

  服務(wù)器(進(jìn)程)維護著(zhù)一組區域,當窗口被創(chuàng )建、移動(dòng)、改變大小和破壞時(shí),通過(guò)這組區域來(lái)改變每個(gè)客戶(hù)的申請。該區域存放在共享內存中,在執行繪圖操作時(shí),客戶(hù)可以從中讀取信息;服務(wù)器連接著(zhù)一些系統設備,如鼠標、鍵盤(pán)或者觸摸屏,服務(wù)器負責將這些設備所產(chǎn)生的事件發(fā)送到適當的客戶(hù)進(jìn)程。服務(wù)器能夠生成一個(gè)設備獨立的鼠標或鍵盤(pán)事件,并將其發(fā)送到相應的客戶(hù)進(jìn)程。觸筆設備通常沒(méi)有鼠標光標,但是觸筆操作能轉化為設備獨立的鼠標事件,然后由客戶(hù)以標準事件進(jìn)行處理。

  嵌入式Qt為客戶(hù)(進(jìn)程)提供API,當客戶(hù)使用Qt API畫(huà)線(xiàn)時(shí),QT/Embedded庫能直接訪(fǎng)問(wèn)顯存,完成畫(huà)線(xiàn)工作;在一些情況下嵌入式Qt客戶(hù)庫需要與服務(wù)器進(jìn)程建立連接,如在客戶(hù)進(jìn)程啟動(dòng)時(shí),發(fā)生了會(huì )影響到全局后果的操作而與服務(wù)器通信時(shí)。例如,當客戶(hù)進(jìn)行了拖放操作后,由于窗口覆蓋而導致顯示區域的變化,則從用戶(hù)那里接收到鼠標和鍵盤(pán)事件時(shí)就需要建立這樣的連接;嵌入式Qt客戶(hù)庫負責處理所有的繪畫(huà)操作,包括文本顯示和字體處理等。

  4.3 基于嵌入式Qt的事件響應設計

  在前述的客戶(hù)/服務(wù)器系統結構中,每個(gè)鍵的按下、釋放都以QWSKeyEvent事件發(fā)出。一個(gè)QWSKeyEvent事件通常包括以下各域:

  •   Unicode:Unicode值。
  •   Keycode:Qt鍵碼值,定義在qnamespace.h頭文件中。
  •   Modifier:位域, 包括Qt::ShiftButton,Qt::ControlButton和Qt::AltButton。
  •   Is press:鍵按下時(shí)為真,釋放時(shí)為假。
  •   Is auto repeat:鍵處于自動(dòng)重復狀態(tài)時(shí)為真。

  嵌入式Qt處理鍵事件的過(guò)程為:鍵盤(pán)驅動(dòng)程序負責從設備中讀取數據,并將鍵事件發(fā)送到服務(wù)器中。當服務(wù)器從鍵盤(pán)驅動(dòng)程序接收到一個(gè)鍵事件時(shí),它首先要經(jīng)過(guò)一個(gè)事件過(guò)濾器,然后再將其發(fā)送至每個(gè)客戶(hù)進(jìn)程,最后由客戶(hù)進(jìn)程負責處理鍵事件,并將其發(fā)送到適當的窗口。具體流程如圖3所示。

為嵌入式Qt處理鍵事件流程圖

  這里,鍵事件未必都來(lái)自鍵盤(pán)設備,包括觸摸屏,觸筆都可以產(chǎn)生鍵事件。服務(wù)器在任何時(shí)候都可以調用函數QWSServer::sendKeyEvent()產(chǎn)生鍵事件。根據這個(gè)特點(diǎn),再結合事件過(guò)濾器的特性,便可構造出所需的輸入服務(wù)器平臺。

  在Qt中,一個(gè)事件通過(guò)調用QObject::event()被發(fā)送到繼承自QObject的對象。事件發(fā)送就是一個(gè)事件已經(jīng)產(chǎn)生,由QEvent正好去表達,且QObject需要去回應。多數事件來(lái)自窗口系統類(lèi)QWidget,如QMouseEvent,QkeyEvent事件。某些事件來(lái)自其他源頭,如QTimerEvent,而某些來(lái)自應用程序,Qt會(huì )一視同仁的處理。

  事件過(guò)濾器在目標對象處理之前去處理事件。過(guò)濾器通過(guò)調用QObject::eventFilter()實(shí)現,它可以接受或丟棄過(guò)濾,也可容許或拒絕進(jìn)一步去處理事件。如果所有的事件過(guò)濾器允許進(jìn)一步的處理事件,事件自己就被送達目標對象。本文在服務(wù)器進(jìn)程中安排事件過(guò)濾器,接收鍵事件,經(jīng)過(guò)處理后,將結果發(fā)送到客戶(hù)進(jìn)程。在客戶(hù)進(jìn)程中,處理鍵事件,并發(fā)送到適當的窗口中。

  5 結語(yǔ)

  嵌入式Linux是目前流行的嵌入式系統解決方案,而嵌入式GUI是嵌入式Linux不可缺少的組成部分。本文通過(guò)分析、比較目前流行的幾種嵌入式GUI,選擇了嵌入式Qt作為研究對象并對其進(jìn)行了深入討論,在此基礎上完成了基于嵌入式Qt的車(chē)載GUI的設計和實(shí)現,具有較高的經(jīng)濟價(jià)值,并可為其他嵌入式娛樂(lè )系統提供參考價(jià)值。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


關(guān)鍵詞: 嵌入式 GUI QT

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>