在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

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

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

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

            服務器:服務器維護著一組區(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)。幀緩沖是標準顯示設備驅動接口,使用MMAP系統(tǒng)將幀緩存映射到應用程序虛擬內(nèi)存空間,這樣應用程序可以訪問它。

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

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

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

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

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

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

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

            圖3 信號與槽的連接

            4 Qt/E的

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

            1) 交叉工具鏈的安裝。

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

            tar -jxvf cross-2.95.3.tar.bz2

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



            評論


            相關推薦

            技術專區(qū)

            關閉