<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于Qt/E的嵌入式GUI的研究及其移植

          基于Qt/E的嵌入式GUI的研究及其移植

          作者: 時間:2012-03-21 來源:網(wǎng)絡(luò) 收藏

          服務(wù)器:服務(wù)器維護著一組區(qū)域,當窗口被創(chuàng)建、移動、改變大小和破壞時,通過這組區(qū)域來改變每個客戶的申請。該區(qū)域存放在共享內(nèi)存中,在執(zhí)行繪圖操作時,客戶可以從中讀取信息;客戶:嵌入式Qt為客戶提供的API與標準的Qt API是一致的。當Qt/E客戶使用Qt API畫線時,Qt/E庫直接訪問顯存,完成畫線工作。嵌入式Qt客戶庫還負責處理所有的繪畫操作,另外,他還處理那些定制的窗口裝飾(如標題條等)。

          3.1.3 Qt/E圖形引擎的實現(xiàn)

          Qt/E的底層圖形引擎基于幀緩沖(frame buffer)。幀緩沖是標準顯示設(shè)備驅(qū)動接口,使用MMAP系統(tǒng)將幀緩存映射到應(yīng)用程序虛擬內(nèi)存空間,這樣應(yīng)用程序可以訪問它。

          幀緩沖驅(qū)動程序的實現(xiàn)分為兩個方面,一方面是LCD等相關(guān)硬件及緩存的初始化,包括圖形在緩沖區(qū)的創(chuàng)建和設(shè)置DMA通道;另外一方面是對畫面緩沖區(qū)的讀寫,read、write及l(fā)seek等系統(tǒng)調(diào)用接口可以調(diào)用驅(qū)動程序的讀寫函數(shù)。至于將畫面緩沖區(qū)的內(nèi)容輸出到LCD顯示屏上,則由硬件自動完成。當設(shè)置DMA通道和畫面緩沖區(qū)后,DMA開始正常工作并將緩沖區(qū)中的內(nèi)容不斷發(fā)送到LCD上,這個過程基于DMA對于LCD的不斷刷新。幀緩沖驅(qū)動程序則將數(shù)據(jù)寫入幀緩存中,這通過映射MMAP來實現(xiàn)[2]。

          在Qt/E中,QScreen類為抽象出的底層顯示設(shè)備基類,其中聲明了對于顯示設(shè)備的基本描述和操作方式,如打開、關(guān)閉、獲得顯示能力、創(chuàng)建 GFX操作對象等。另外一個重要的基類是QGFX類。該類抽象出對于顯示設(shè)備的具體操作接口(圖形設(shè)備環(huán)境),如選擇畫刷、畫線、畫矩形、alpha操作等。以上兩個基類是Qt/E圖形引擎的底層抽象,其中許多函數(shù)是虛函數(shù)。當具體的顯示設(shè)備(如具體的幀緩沖設(shè)備和虛擬幀緩沖設(shè)備)從其派生類時,這些派生類會繼承并重載基類中的虛函數(shù)來實現(xiàn)[3]。

          3.2 Qt系統(tǒng)的信號與槽(Signal and Slot)機制

          信號/槽是一種高級接口,應(yīng)用于對象之間的通信,是Qt的核心特性,也是Qt區(qū)別于其他工具包的重要地方。信號/槽是Qt自行定義的一種通信機制,獨立與標準的C/C++語言,因此要正確的處理信號和槽,必須借助于一個稱為MOC(Meta Object Compiler)的Qt工具,該工具是一個C++預(yù)處理程序,它為高層次的事件處理自動生成所需要的附加代碼。

          Qt中使用信號/槽機制替代原始回調(diào)和消息映射機制。當一個特定事件發(fā)生的時候,一個信號被發(fā)射。Qt的窗口部件有很多預(yù)定義的信號,但是程序員總是可以通過繼承來加入自定義的信號。槽就是一個可以被調(diào)用處理特定信號的函數(shù)。Qt的窗口部件有很多預(yù)定義的槽,但是通常的習慣是加入程序員自己的槽,這樣就可以處理自己所感興趣的信號。

          所有從QObject或其子類派生的類都能夠包含信號和槽。當對象改變其狀態(tài)時,信號就由該對象發(fā)射出去,這就是對象所要做的全部事情。它不知道另一端是誰在接收這個信號,這就是真正的信息封裝,它確保對象被當作一個真正的軟件組件來使用。槽用于接收信號,但它們是普通的對象成員函數(shù)。一個槽并不知道是否有任何信號與自己相連接。而且,對象并不了解具體的通信機制,這樣就可以相對容易地開發(fā)出代碼可高重用的類[4]。

          多個信號可以連接一個槽,一個信號也可以連接多個槽,甚至一個信號與另外一個信號相連接也是可能的,這時無論第一個信號什么時候發(fā)射系統(tǒng)都將立刻發(fā)射第二個信號,如圖3所示[5]??傊?,信號與槽構(gòu)造了一個強大的部件編程機制。

          圖3 信號與槽的連接

          4 Qt/E的

          在PC上基于Qt/X11和qvfb的應(yīng)用程序調(diào)試通過以后就可以將應(yīng)用程序軟件到目標平臺上,但前提是要保證frame buffer、觸摸屏等驅(qū)動程序的正常運行[6]。Qt/E過程如下:

          1) 交叉工具鏈的安裝。

          本文選用的交叉工具鏈是arm-linux-gcc系列。安裝包為:cross-2.95.3.tar.bz2將其拷貝到某個目錄下,依次執(zhí)行如下命令:

          tar -jxvf cross-2.95.3.tar.bz2

          這個工具鏈應(yīng)該安裝的路徑是:/usr/local/arm/2.95.3(或者可以通過查看GCC版本號,可以得到一些信息,從版本信息中可以看到“-prefix=……”,這就是GCC安裝的路徑,它是在GCC編譯前通過prefix選項配置的)。



          關(guān)鍵詞: Embedded 嵌入式GUI 移植

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();