第九章 QtEmbedded嵌入式圖形開發(fā)_第1頁
第九章 QtEmbedded嵌入式圖形開發(fā)_第2頁
第九章 QtEmbedded嵌入式圖形開發(fā)_第3頁
第九章 QtEmbedded嵌入式圖形開發(fā)_第4頁
第九章 QtEmbedded嵌入式圖形開發(fā)_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第九章Qt/Embedded嵌入式圖形開發(fā)目錄Qtopia虛擬平臺及在S3C2410s開發(fā)板上移植本章導讀Qt/Embedded嵌入式圖形開發(fā)基礎目錄本章導讀能力目標:●了解嵌入式圖形開發(fā)的流程;●了解嵌入式圖形開發(fā)工具Qt和Qt/Embedded;●了解嵌入式圖形開發(fā)工具Qt/Embedded;●了解Qt/Embedded的開發(fā)環(huán)境;●了解Qt設計器及其使用;●了解Qtopia與Qt/Embedded的關系;●了解Qtopia的虛擬平臺構建和開發(fā)流程。1學習導航:本章是對基于ARM9的圖形界面的設計平臺Qt的介紹,在文章中系統(tǒng)的介紹了Qt/Embedded和Qtopia的開發(fā)環(huán)境建立和進行開發(fā)的相關概念、基礎知識和一般應用的綜述,為后續(xù)的深入學習提供了知識基礎,和理論儲備,圖9-1所示是Qt/E的圖形界面的開發(fā)流程。Qt/E的圖形界面的開發(fā)Qt/E的開發(fā)環(huán)境的建立主函數(shù)和其它文件的編寫新建窗口新建工程生成makefile文件編譯工程2知識框架:本章知識內(nèi)容為基于ARM9的Linux嵌入式系統(tǒng)地圖形界面的開發(fā)的工具、開發(fā)環(huán)境、信號和插槽的概念以及移植何下載等。Linux嵌入式圖形開發(fā)工具Qt、Qt/E和QtopiaQt/E和Qtopia的開發(fā)環(huán)境的創(chuàng)建Tmake工具包Qt設計器和窗口類的應用嵌入式圖形開發(fā)的程序?qū)嵗齉t-x11工具包Qt/Embedded工具包3Qt/Embedded嵌入式圖形開發(fā)基礎Qt/E是Tolltech公司的嵌入式產(chǎn)品,它是以工具包的形式提供給開發(fā)人員的。Qt是C++語言開發(fā)的,最初的Qt主要是為跨平臺的軟件開發(fā)者提供一個統(tǒng)一的圖形用戶編程接口,以及統(tǒng)一的網(wǎng)絡和數(shù)據(jù)庫操作的編程接口。如今Qt已經(jīng)成為一個支持多操作系統(tǒng)的應用程序開發(fā)框架,它為用戶提供的工具包中包括了圖形設計器、Makfile制作工具、字體國際化工具和Qt的C++類庫,以及豐富的API函數(shù)。Linux桌面系統(tǒng)KDE就是基于Qt開發(fā)的。4Qt/E作為一個專用于嵌入式系統(tǒng)的GUI,它運行時需要的資源少,Qt/Embedded在運行時只需要一個較小的存儲空間和內(nèi)存,Qt/E采用模擬化編程,是可裁剪的,開發(fā)人員可以根據(jù)應用的需求,將不需要的功能剪裁掉。9.1.1Qt/Embedded概述Qt/E是Qt的嵌入式版本,是專門為嵌入式系統(tǒng)的圖形用戶界面定制的開發(fā)工具包。Qt/E與Qt一樣是用C++語言開發(fā)的,它繼承了C++的優(yōu)良的框架,為用戶提供了基于信號和插槽的組件化編程機制。5Qt/Embedded可以運行在不同的處理器上,只要Linux系統(tǒng)支持該處理器,則Qt/Embedded就可以在編譯后正常運行在該處理器上。目前Qt/E支持的處理器有InterX86、MIPS、ARM、M68K和PowerPC等。Qt/E采用面向?qū)ο蟮脑O計思想,支持多種不同的輸入設備,如:鍵盤、鼠標和圖形加速卡等。Qt/E不需要X服務器或Libe庫,因此它所消耗的內(nèi)存不大,通過裁剪和隱式共享的技術,Qt/E能夠最大程度的節(jié)省內(nèi)存空間。隱式共享是Qt/E采用的一種節(jié)省內(nèi)存空間的技術,在Qt中有很多類中都采用了該技術。使用該技術可以避免不必要的復制占用內(nèi)存空間。6Qt/E可以直接寫內(nèi)核緩沖幀,它的工具包中的圖形設計器Designer支持可視化的用戶接口設計,同時還具有動態(tài)布局的功能。圖9-3是Qt/Embedded的Linux版本的層次結構圖。應用程序QtAPIQt/Embedded幀緩沖Linux內(nèi)核7Qt/E窗口系統(tǒng)一個Qt/Embedded窗口系統(tǒng)可以包含一個或多個進程,其中的一個進程可以作為服務器進程。服務器進程其主要功能如下:為客戶分配顯示區(qū)域繪制屏幕提供輸入方法提供用戶接口產(chǎn)生鼠標事件產(chǎn)生鍵盤事件8Qt/E字體Qt/Embedded嵌入式系統(tǒng)的圖形用戶界面開發(fā)包支持以下4種格式的字體,同時還可以通過增加子類的方式來支持其他字體格式,QT/E中使用的所有字體都采用Unicode方式進行編碼。TrueType(TTF):可縮放的矢量顯示字體。PostscriptType1(PFA/PFB):可縮放的矢量打印字體。9BitmapDistributionFormatfonts(BDF):不可縮放的位圖像素字體,占用的存儲空間量大。QtPrerenderedFont(QPF):是QT/E專用的,不可縮放的輕量級字體。在Qt/Embedded開發(fā)包中QPF是QT/E專用的始終可用的字體,其余三中字體的開啟和關閉是可選的。TTF字體是顯示用的,可縮放的矢量字體,使用該格式時,每個指定大小的字符只在第一次顯示時被渲染;10BDF字體是位圖顯示字體,第一次使用該字體時所有字符都會被渲染,TTF、PFA和QPF字體格式都能采用光滑的抗鋸齒方式進行渲染;Qt/E輸入方法Qt/E開發(fā)包對不同的輸入法提供了支持接口,對于常用的中文輸入法、日文輸入法、阿拉伯文輸入法和希伯來文輸入法,都必須改變鍵盤的輸入編碼。11Qt/E開發(fā)包中的輸入法類QWSInputMethod是一個基類,它定義了一些接口接口來支持不同的輸入法程序,它可以處理鼠標和鍵盤事件,把接收到的鍵盤事件按照指定的輸入法編碼規(guī)則轉(zhuǎn)換成對應的文字。下面我以中文輸入法為例來介紹文字輸入的步驟。在鍵盤上按拼音或五筆按順序進行按鍵,在Linux的服務器端監(jiān)測到鍵盤和鼠標事件,執(zhí)行對應的輸入法。當繼續(xù)進行按鍵時下文處于激活狀態(tài),輸入法會嘗試著去創(chuàng)建與鍵盤輸入相對應的中文字符。12輸入完成時,需要用戶通過某種方式來確認輸入完成的結束字符串,此時,用戶所選擇的結束字符串將最終被發(fā)送到當前的編輯窗口。Qt/Embedded采用面向?qū)ο蟮脑O計思想,支持多種不同的輸入命令。例如,鍵盤、鼠標、圖形加速卡等。Qt/Embedded不需要服務器或者lib庫,因此它所消耗的內(nèi)存不大,通過裁剪和隱藏方式共享技術,Qt/Embedded能夠最大程度地節(jié)省內(nèi)存空間。139.1.2創(chuàng)建Qt/Embedded開發(fā)環(huán)境準備工作在進行Qt/E開發(fā)環(huán)境的安裝前,應先獲取相關的安裝包。要創(chuàng)建Qt/E的開發(fā)環(huán)境,我們需要先準備如下的安裝包:Tmake安裝包:tmake是makefile的生成工具。Qt/Embedded安裝包:qt-embedded-2.3.2.tar.bz2是嵌入式開發(fā)包。Qt的X11版的安裝包:qt-x11-2.3.2.tar.gz是用以產(chǎn)生開發(fā)環(huán)境所需的工具。14安裝tmake在linux的命令行模式下先對文件進行解壓,在安裝。tar

xfztmake-1.13.tar.gzexportTMAKEDIR=/qt/tmake-1.13exportTMAKEPATH=/qt/tmake-1.13/lib/qws/linux-x86-g/exportPATH=/qt/tmake-1.13/bin/:$PATH15安裝Qt/Embedded本書中選用的Qt/Embedded安裝包是qt-embedded-linux-opensource-src-3.4.0-rc1.tar.bz2它是一個完整的開發(fā)工具,其中包含了基于linux的嵌入式平臺開發(fā)工具和GUI。下面是qt-embedded-linux的安裝步驟:tar

–jxvfqt-embedded-2.3.2.tar.bz2cd

qt-embedded-2.3.2./comfigure-prefix/opt/qte-qt-mouse-linuxup-qvfb16Makemake

install

exportQTDIR

=/opt/qpeexportQTEDIR

=$QTDIRexport

PATH

=/opt/qte/bin:$PATHexportLD_LIBRARY_PATH=opt/qte/lib:$LD_LIBRARY_PATH17安裝Qt-X11qt-x11-2.3.2.tar.bz2主要是產(chǎn)生Qt開發(fā)工具,如designer和qvfb等,下面是qt-x11-2.3.2.tar.bz2的安裝步驟:tar

–jxvfqt-x11-2.3.2.tar.bz2cd

qt-x11-2.3.2./configure

make

18make

install

cd

qt-x11-2.3.2

cd

/tools/qvfb

make

cpbin/qvfb/opt/qte/bin199.1.3Qt設計器簡介Qt設計器是用來設計和實現(xiàn)用戶界面,并支持多平臺下使用的一種可視化的設計工具。Qt設計器中包含了一個代碼編輯器,qt窗口等功能的基類,同時還支持信號和插槽機制。使用Qt設計器你可以在編輯器中自己定制插槽的功能代碼、操作工具欄、菜單欄等。20信號和插槽信號和插槽是Trolltech創(chuàng)立的一種新機制,主要用于對象間的通信,Qt是完全支持該機制的,所以信號與插槽也被認為是Qt編程的基礎。在圖形用戶界面中常常需要對用戶的鼠標和鍵盤等動作做出響應,在很多時候?qū)τ谶@些事件的響應是通過回調(diào)函數(shù)來實現(xiàn)的,即事先定義一個函數(shù),并把函數(shù)的指針作為參數(shù)傳遞給另外一個這種調(diào)用函數(shù),當特定的事件發(fā)生時,調(diào)用函數(shù)通過地址調(diào)用回調(diào)函數(shù)對事件進行處理。而信號和插槽是另一種完全不同的機制,在Qt的編程中它取代了回調(diào)函數(shù),同時也避免了由此帶來的進程崩潰的問題。21在Qt中信號和插槽是使用C++來實現(xiàn)的。在采用信號和插槽編程的類中,必須對QObject子類進行繼承,并在類的定義中加上Q_OBJECT宏。在類中信號signals是不需要實現(xiàn)的,當信號被激活時,執(zhí)行與該信號連接的插槽函數(shù)。插槽函數(shù)是需要被實現(xiàn)的函數(shù),它與普通的C++成員函數(shù)一樣,它可以是虛函數(shù),可以被重載。唯一不同的是插槽適合信號連接的函數(shù),它可以在信號即事件發(fā)生后被自動調(diào)用。22在應用中,我們可以將信號和插槽隨意進行組合,一個信號可以連接到一個或多個插槽

,當一個信號被連接到多個插槽時,當信號發(fā)送時,與之連接的插槽將一個一個地被調(diào)用。如果是多個信號連接到一個插槽,此時只要與之相連的其中一個信號發(fā)送,插槽就會被調(diào)用。圖9-5是信號和插槽的連接示意圖。對象1信號1插槽對象3插槽對象2信號插槽1/223代碼編輯器代碼編輯器是進行代碼編寫的地方,使用代碼編輯器用戶可以在程序中嵌入自定義的插槽和信號。Qt中的信號和插槽是用C++語言編寫的,它可以自動生成部分代碼,也可以使用編輯器來編寫實現(xiàn)的代碼。關于程序的編寫規(guī)則和C++的書寫一樣,在此不再贅述。24窗口Qt設計器擁有豐富的窗口資源,Qwidget類是所有用戶界面對象的基類。窗口是用戶界面的一個基本原子,每一個窗口都是矩形,它不僅可以顯示繪制圖形,還可以從窗口系統(tǒng)中接收鼠標和鍵盤事件。圖9-6是Qwidget的類繼承圖。25每一個窗口都有一個頂級窗口,QDialog可以作為一個頂級窗口,它是一個沒有父窗口的窗口。通常情況下,在一個父窗口會包含框架、標題欄等子窗口。非頂級窗口就是子窗口,它是父窗口中的組成部分。類QWidget是擁有很多成員函數(shù)和成員變量的類。它的所有成員可以分為公有成員、私有成員和保護成員幾大類,下面將羅列出部分的公有插槽函數(shù)。QwidgetQDialogQFrameQLabelQLineEditQSpinBoxQObject26QWidget的成員眾多,在使用的時候你可以根據(jù)需要為你的窗口添加部件和事件,如:窗口重繪、鼠標按下、鼠標釋放和按鍵相關函數(shù)等。paintEvent():窗口重繪函數(shù),當窗口中的部件更新需要重繪時調(diào)用該函數(shù)。執(zhí)行該函數(shù)將在屏幕上重繪窗口。resizeEvent():是窗口部件大小的函數(shù)。mousePressEvent():當鼠標鍵被按下時被調(diào)用該函數(shù),在Qt中有六個與鼠標相關的事件,但鼠標按下和鼠標釋放事件是其中最重要的事件。27mouseReleaseEvent():是鼠標鍵釋放事件函數(shù),當窗口部件接收到相應的鼠標釋放事件時,調(diào)用該函數(shù)。mouseDoubleClickEvent():是鼠標鍵雙擊事件函數(shù)。keyPressEvent():是鍵按下的事件函數(shù),當鍵被按下和鍵被按下時間足夠長時可以自動重復該函數(shù)就被調(diào)用。focusInEvent():當窗口部件獲得鍵盤焦點時調(diào)用該函數(shù)。focusOutEvent():與focusInEvent()函數(shù)不同,它是當窗口部件失去鍵盤焦點時被調(diào)用的。28mouseMoveEvent():是在鼠標鍵被按下同時鼠標移動時才會被調(diào)用,比如用鼠標進行拖動等操作。keyReleaseEvent():當鍵被釋放或這個鍵是自動重復并且被按下一段時間時被調(diào)用,如果Tab和Shift+Tab鍵被用在焦點變換機制中,它們將僅被傳遞給窗口部件。為了強迫鍵釋放事件被你的窗口部件處理,你必須重新實現(xiàn)QWidget::event()。wheelEvent():當窗口部件擁有焦點時,只要用戶轉(zhuǎn)動鼠標滾輪就調(diào)用該函數(shù)。29enterEvent():該函數(shù)在鼠標進入這個窗口部件屏幕空間時被調(diào)用。leaveEvent():是在鼠標離開這個窗口部件的屏幕空間時被調(diào)用。moveEvent():是窗口部件相對于它的父窗口部件被移動時調(diào)用的。closeEvent():當用戶關閉窗口部件時被調(diào)用的,該函數(shù)也可以在close()函數(shù)被調(diào)用時調(diào)用。309.1.4QtDesigner實例及Qt/E的交叉編譯1.新建工程第一步是新建一個工程文件,并手動為其添加頭文件和源文件。在這里使用工程文件而不是創(chuàng)建一個單獨的ui文件的好處是,使用工程文件你可以將所有的圖像存儲到一個單一的文件中,而且可以通過鼠標點擊來加載窗口。點擊“file->new”進入如圖9-7所示的新文件對話框,選擇“C++Project”單擊OK。這時你就可以為你的工程文件命名,并制定保存位置。31322.新建窗口在QtDesigner中,單擊菜單項“new”,將彈出一個“newForm”對話框,在彈出的這個對話框中選擇“widget”并單擊“OK”了,新建一個窗口。完成窗口的新建工作后,接下來就是修改窗口的屬性,在name屬性欄中填入“hello”,設置窗口名;設置窗口尺寸確保窗口的大小與目標板上的顯示屏大小一致,在此我們設置其窗口尺寸為240*320。333.填寫顯示文本雙擊“textlabel”在里面填寫要顯示的文本信息,單擊“OK”,將你的工程保存到指定的文件夾里,最好選擇和你的工程名一致的文件夾,此時QtDesigner以為你生成了一個hello.ui文件。4.生成hello.h頭文件和hello.cpp現(xiàn)在我們可以通過uic命令來生成hello.h頭文件和hello.cpp實現(xiàn)文件。34命令“uic-ohello.hhello.ui”是生成頭文件,而“uic-ohello.cppimplhello.hhello.ui”是生成與hello.h對應的hello.cpp文件。執(zhí)行完成就得到了Hello窗體的頭文件hello.h和實現(xiàn)文件hello.cpp,接下來就可以為其添加相應的代碼了。uic-ohello.hhello.uiuic-ohello.cppimplhello.hhello.ui355.編寫main函數(shù)一個Qt/Embedded應用程序中應該包含一個main主函數(shù),使用編輯器vi或emacs先新建一個main.cpp文件,并為其填寫如下代碼。#include"hello.h"#include<qapplication.h>/*Main.cpp是主函數(shù),程序從此開始執(zhí)行*/intmain(intargc,char*argv[]){QApplicationap(argc,argv);/*

生成一個hello的變量*/hellodlp;ap.setMainWidget(&dlp);dlp.show();returnap.exec();}366.編輯完成文件的編寫后,接下來進行的編輯了。前面介紹的三個文件hello.h、hello.cpp和main.cpp都應該被包含在工程文件.pro內(nèi)。HEADERS=hello.hSOURCES=hello.cpp\Main.cppINTERFACES

=

TARGET

=hello377.生成makefile文件在Qt中編輯器同樣是根據(jù)makefile文件的內(nèi)容來進行編譯的,在Qt中生成makefile文件可以使用tmake或者qmake。其中qmake用于本地編譯,tmake則既可以生成本地的makefile,也可以生成用于交叉編譯的makefile,二者的區(qū)別在于TMAKEPATH路徑的不同,一個是用于x86,另一個是用于arm或其他的處理器。8.編譯工程直接執(zhí)行make命令對整個工程進行編譯鏈接,生成一個二進制的可執(zhí)行文件hello,將這個文件發(fā)布到目標板上就完成了。38Qtopia虛擬平臺及在S3C2410s開發(fā)板上移植Qtopia是Trolltech公司開發(fā)的,用于采用嵌入式Linux操作系統(tǒng)的消費類電子設備中。他是一個綜合的應用平臺,包含有完整的應用程序、用戶界面、窗口操作系統(tǒng)以及開發(fā)框架等。Qtopia是基于Qt/E開發(fā)的,是帶桌面的系統(tǒng)嵌入式圖形開發(fā)工具。常用于PDA、手機等電子產(chǎn)品中。Qtopia是帶桌面的嵌入式Qt,而Qt/E是Qt的嵌入式開發(fā)工具。Trolltech所提供的Qtopia有三大版本,分別是Qtopia手機版、QtopiaPDA版和Qtopia消費電子產(chǎn)品平臺。399.2.1構建本機Qtopia虛擬平臺建立本機的Qtopia虛擬平臺,需要先準備qtopia的環(huán)境qtopia-free-source-2.1.1.tar.bz2、e2fsprogs-1.39、tmake、qt-embedded和qt-x11。安裝e2fsprogs-1.39e

溫馨提示

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

最新文檔

評論

0/150

提交評論