ARM匯編語言程序設(shè)計基礎(chǔ) 第13章 圖形用戶接口
《ARM匯編語言程序設(shè)計基礎(chǔ) 第13章 圖形用戶接口》由會員分享,可在線閱讀,更多相關(guān)《ARM匯編語言程序設(shè)計基礎(chǔ) 第13章 圖形用戶接口(45頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、 第第13章章 圖形用戶接口(圖形用戶接口(GUI) 定義n圖形用戶接口(Graphics User Interface,GUI),又叫桌面系統(tǒng)、窗口管理系統(tǒng)、圖形操作環(huán)境、圖形用戶界面等,是操作系統(tǒng)和用戶的人機接口。GUI極大地方便了非專業(yè)用戶的使用,人們不再需要死記硬背大量的命令,而可以通過窗口、菜單方便地進行操作。 13.1圖形用戶接口的層次結(jié)構(gòu)圖形用戶接口的層次結(jié)構(gòu)13.1.1圖形基礎(chǔ)設(shè)施圖形基礎(chǔ)設(shè)施n圖形基礎(chǔ)設(shè)施是一種底層的圖形驅(qū)動引擎,一般是由操作系統(tǒng)提供。它是用作其他更高一層圖形或者圖形應(yīng)用程序的基本函數(shù)庫/依賴庫,在其之上可以針對某些特定應(yīng)用需求做進一步的封裝。譬如,在對于只需
2、要單任務(wù)的低端應(yīng)用,可以以API函數(shù)的形式,封裝成靜態(tài)或者動態(tài)的高級圖形函數(shù)庫。而在更多的場合,用戶是需要類似Windows的桌面系統(tǒng),這樣就要構(gòu)建多任務(wù)GUI窗口管理系統(tǒng)。在Linux環(huán)境下,常見的圖形基礎(chǔ)設(shè)施有SVGALib(VGA)、X Window(Xlib)、LibGGI和FrameBuffer等。13.1.2高級圖形函數(shù)庫高級圖形函數(shù)庫n高級圖形函數(shù)庫提供的圖形界面編程接口主要分為兩大類,一類只提供基本的畫點繪線、文本區(qū)域處理等,如SDL(standard drawing library);另一類就是以窗口部件(widget,亦稱為控件、部件等)形式,采用面向?qū)ο蠓绞竭M行可視化的編
3、程,可用于嵌入式GUI系統(tǒng)(需要諸如pThread等消息處理函數(shù)庫的支持)和可以運行在GUI系統(tǒng)上的應(yīng)用程序的開發(fā),諸如GTK,QT和PEG等。13.1.3 GUI窗口管理系統(tǒng)窗口管理系統(tǒng)nGUI窗口管理系統(tǒng)是一個非常復(fù)雜的系統(tǒng),很多時候甚至就類似于一個操作系統(tǒng),它是嵌入式系統(tǒng)設(shè)計中迄今為止沒有很好解決的難點之一。目前,在桌面GUI系統(tǒng)領(lǐng)域主要有X-Windows、KDE、GNOME等,在嵌入式系統(tǒng)領(lǐng)域,主要有MiniGUI、Nano-X(Microwindows)、OpenGUI和Qpe(Qt Palmtop Environment)等。13.2 桌面桌面Linux系統(tǒng)中系統(tǒng)中GUI nKD
4、E(Kool Desktop Environment)與GNOME(GNU Network Object Environment)是目前桌面Linux/UNIX系統(tǒng)中最常用的桌面GUI窗口系統(tǒng)。MiniGUI、Qt/E和Nano-X則是嵌入式系統(tǒng)中廣泛應(yīng)用的嵌入式GUI系統(tǒng)。13.2.1 KDEnKDE是1996年德國Matthias Ettrich發(fā)起了符合GPL規(guī)范的開源項目,與之前各種基于X Window的圖形用戶環(huán)境不同的是,KDE并非針對系統(tǒng)管理員等高級用戶,而是鎖定為普通的終端用戶,即希望KDE能夠包含用戶日常應(yīng)用所需要的所有應(yīng)用程序組件,例如Web瀏覽器、電子郵件客戶端、辦公套件
5、、圖形圖像處理軟件等。 13.2.2 GNOMEnGNOME是1997年墨西哥年僅26歲的程序員Miguel De Icaza發(fā)起的開源項目,目前諸如RedHat/Fedora、SuseLinux發(fā)行版都默認(rèn)使用它。它功能上的特性和KDE類似,并且相對要輕便些 13.3 嵌入式Linux系統(tǒng)GUI n在現(xiàn)代的嵌入式人機系統(tǒng)中,人是用戶和主動的參與者,能與機器對話,要求機器對人的各種動作做出響應(yīng)。因此,圖形用戶界面已經(jīng)成為嵌入式應(yīng)用系統(tǒng)研制中的重點之一。典型的嵌入式GUI 系統(tǒng)有緊縮的 X Window 系統(tǒng)、MiniGUI、Nano-X(MicroWindows)、Tiny X(緊縮版的X-W
6、indows)、OpenGUI、QT/Embedded 等.13.3.1 MiniGUInMiniGUI是1998年底推出的一款面向嵌入式系統(tǒng)或者實時系統(tǒng)的GUI系統(tǒng),是國內(nèi)最早出現(xiàn)的、在國際上有一定知名度的幾個自由軟件項目之一,最先是由原清華大學(xué)教師魏永明先生主持開發(fā),現(xiàn)由北京飛漫軟件技術(shù)有限公司進行商業(yè)化維護和運作。自1999 年初以遵循 GPL 協(xié)議發(fā)布第一個版本以來,MiniGUI 已廣泛應(yīng)用于手持信息終端、機頂盒、工業(yè)控制系統(tǒng)及工業(yè)儀表、便攜式多媒體播放機、查詢終端等產(chǎn)品和領(lǐng)域。13.3.2 QtopianQtopia是嵌入式GUI窗口系統(tǒng),也叫做嵌入式Linux的桌面系統(tǒng),是Tro
7、lltech 面向嵌入式設(shè)備的Qt掌上機環(huán)境(Qt Palmtop Environment,Qpe)。它建立在Qt/ Embedded(即Qt/E)之上,基于Qt/E開發(fā)出來的程序就可以放到這個桌面上,為開發(fā)提供了一個類似于Windows這樣易于使用的界面。Qtopia分為開源的PDA版本Qtopia和收費的手機版Qtopia,前者提供PDA的桌面系統(tǒng)基本源代碼,后者還包括手機模塊代碼等。 13.3.3 Nano-XnNano-X的前身就是Century Software 推出的開源項目Microwindows。它主要采用C語言進行開發(fā),采用C/S體系結(jié)構(gòu),提供了相對完善的圖形功能,并且具有分
8、層設(shè)計。最底層是屏幕和輸入設(shè)備驅(qū)動程序(關(guān)于鍵盤或鼠標(biāo))來與實際硬件交互。在中間層,可移植的圖形引擎提供對線的繪制、區(qū)域的填充、多邊形、裁剪以及顏色模型的支持。 13.4 MiniGUI的開發(fā)初步的開發(fā)初步nMiniGUI具有良好的軟件架構(gòu),通過抽象層將MiniGUI 上層和底層操作系統(tǒng)隔離開來。如圖13.4.1所示,基于MiniGUI 的應(yīng)用程序一般通過ANSI C 庫、操作系統(tǒng)和驅(qū)動程序接口以及MiniGUI 自身提供的API 來實現(xiàn)自己的功能;MiniGUI 中的“可移植層”可將特定操作系統(tǒng)及底層硬件的細(xì)節(jié)隱藏起來,而上層應(yīng)用程序則無需關(guān)心底層的硬件平臺輸出和輸入設(shè)備。13.4 Mini
9、GUI的開發(fā)初步的開發(fā)初步13.4.1 MiniGUI 的開發(fā)環(huán)境 nMiniGUI 的開發(fā)可以在Linux 或Windows操作系統(tǒng)下進行。由于MiniGUI 完全用C 來編寫,具有非常好的移植性,也使得MiniGUI 應(yīng)用程序的交叉編譯工作十分方便。一般而言,為嵌入式設(shè)備編寫的應(yīng)用程序可以在任何安裝在針對該設(shè)備的交叉編譯工具鏈的平臺上進行編譯,比如在桌面Linux 環(huán)境下安裝針對ARM CPU平臺交叉編譯器(arm-linux-gcc等),然后再對應(yīng)用程序進行交叉編譯。 n這里給出windows下面編譯minigui的步驟(wvfb):n 首先要從網(wǎng)上下載MinGui For Win32
10、開發(fā)包的源代碼。minigui-dev-1.6.9- win32.tar.tar;n 解壓后,把dll文件夾下的minigui.lib pthreadVC1.lib拷貝到helloworld文件夾下(以便程序能夠在當(dāng)前目錄下找到DLL文件),然后進入helloworld文件夾找到helloworld.dsw,用vc+打開;n 然后在工程菜單內(nèi)設(shè)置選擇C/C分類中選擇預(yù)處理n在包含路徑中填入./include,./include/minigui,./include/pthread-win32n 在LINKE目錄下選擇general,然后把LIB里的庫文件加在對象/庫模塊的后面,也就是那兩個min
11、igui.lib pthreadVC1.lib,n 最后在分類中選擇INPUT把庫文件地址連接進去也就是./LIBn 打開wvfb文件夾下的wvfb.exe,然后在vc+中執(zhí)行helloworld .n這里要注意的是,MiniGUI for Win32是預(yù)編譯的函數(shù)庫,因此,其中的功能特性是固定的,包括編譯時選項和運行時選項。 13.4.2 MiniGUI的移植的移植n1. PC 機上配置,編譯,安裝,運行機上配置,編譯,安裝,運行MiniGUIn(1)在redhat9.0 上配置FrameBuffern要激活VESA Frame Buffer 驅(qū)動程序,需要修改/boot/grub/menu
12、.lst 文件,并在kernel打頭的一行添加vga=0 x0317.n其中Red Hat Linux (2.4.208,F(xiàn)rameBuffer)就是設(shè)置了VESA FrameBuffer 的引導(dǎo)選項。 n(2)在)在PC上編譯并安裝上編譯并安裝MiniGUI開發(fā)開發(fā)包包n第一步,在PC 上編譯并安裝libminiguin第二步,在PC 上安裝MiniGUI 的資源n第三步,編譯應(yīng)用程序例子n(3)Redhat上MiniGUI 的運行n由于必須要在控制臺模式才能運行MiniGUI。要啟動控制臺,按住CtrlAlt 的同時,n按F1F6 中的任意一個均可,然后登錄系統(tǒng),進入sample 目錄,直
13、接運行即可。n2. 交叉編譯,并在嵌入式目標(biāo)機上運行交叉編譯,并在嵌入式目標(biāo)機上運行MiniGUIn(1) 交叉編譯libminiguin(2) 安裝MiniGUI 資源文件n(3) 編譯應(yīng)用程序例子n(4) 在嵌入式目標(biāo)機上運行MiniGUI13.4.3 MiniGUI應(yīng)用編程庫應(yīng)用編程庫nMiniGUI在嵌入式產(chǎn)品中移植好后,就要進行相應(yīng)的產(chǎn)品應(yīng)用程序的開發(fā)。應(yīng)用程序開發(fā)人員可以直接調(diào)用MiniGUI的窗口以及圖形接口編寫自己的應(yīng)用程序,也可以利用MiniGUI 內(nèi)建的各種控件(control/widget)來快速開發(fā)自己的應(yīng)用程序。MiniGUI 提供了各種豐富的控件,如按鈕,工具欄等。
14、同時還為開發(fā)者提供了自定義控件的接口,并能方便地對已有控件進行擴展。13.5 Qt/Embeddedn13.5.1 Qt/Embedded的應(yīng)用架構(gòu)的應(yīng)用架構(gòu)nQt/Embedded簡稱為Qt/E ,是著名的QT開發(fā)商Trolltech推出的面向嵌入式系統(tǒng)領(lǐng)域的QT開發(fā)包,是一組用于訪問嵌入式設(shè)備的 Qt C+ API函數(shù)庫。它以原始桌面Qt為基礎(chǔ),并做了許多出色的調(diào)整以適用于嵌入式環(huán)境,提供了豐富的窗口小部件(Widgets),并且還支持窗口部件的定制,可為用戶提供漂亮的圖形界面。 13.5 Qt/EmbeddednFramebuffer是Linux 2.2.x以上內(nèi)核的版本中的提供的一種圖
15、形驅(qū)動程序接口。這種接口采用內(nèi)存映射(mmap)系統(tǒng)調(diào)用,將顯示設(shè)備抽象為幀緩沖區(qū)。用戶可以將它看成是顯示內(nèi)存的一個映象,將其映射到進程地址空間之后,就可以直接進行讀寫操作了,而寫操作可以立即反映在屏幕上。Framebuffer驅(qū)動程序是最重要的驅(qū)動程序之一,正是這個驅(qū)動程序才能使系統(tǒng)屏幕顯示內(nèi)容。 13.5.2 QVFB虛擬運行環(huán)境虛擬運行環(huán)境nQVFB是“Qt/Embedded Virtual Framebuffer”的簡稱,即Qt/E的虛擬幀緩沖,是在桌面Linux中為嵌入式圖形應(yīng)用程序提供一個虛擬的運行環(huán)境。它實際上就是由一個X11的應(yīng)用程序在共享的內(nèi)存去也中來模擬了一個緩沖幀,通過指
16、定顯示設(shè)備的寬度,高度和顏色深度,虛擬出來的緩沖幀將和物理的嵌入式顯示設(shè)備在每個像素上保持一致。 n使用QVFB的方法如下:n 將Qt/E源代碼中的qvfb目錄作為正常的x86 PC平臺的Qt/X11應(yīng)用程序來編譯,而不要做為Qt/E的應(yīng)用程序來編譯。 n 這時就可以運行一些已經(jīng)編譯后的二進制Qt/E應(yīng)用程序,命令行中要用參數(shù)-qws表示將它作為Qt/E服務(wù)器。13.6 Qt開發(fā)及運行環(huán)境的創(chuàng)建開發(fā)及運行環(huán)境的創(chuàng)建n13.6.1 Qt/E應(yīng)用程序在應(yīng)用程序在PC虛擬平臺上虛擬平臺上的運行的運行n1、 Qt/E應(yīng)用程序在PC虛擬平臺上的運行n首先首先,下載Qt開發(fā)環(huán)境的源程序包。 n2 、Qt/
17、E應(yīng)用程序在嵌入式設(shè)備中的運行 n要將寫好的Qt/E應(yīng)用程序移植到嵌入式設(shè)備上運行,需要對Qt/Embedded采用交叉編譯的方式重新進行編譯,生成一些適合于嵌入式Linux的函數(shù)庫。 n3、 Qtopia窗口系統(tǒng)在PC虛擬平臺上的運行 n要在PC平臺上建立起Qtopia 窗口系統(tǒng)的虛擬運行環(huán)境,除了同前面一樣要編譯Build Qt/X11、Build Qvfb(QTEDIR/tools/qvfb)和Build libqte外,就另外還需要編譯Qtopia這個GUI系統(tǒng) 。n4、 Qtopia窗口系統(tǒng)在嵌入式設(shè)備中的運行 n實際上就是將Qtopia窗口系統(tǒng)移植到嵌入式設(shè)備中的運行,其前面幾個步
18、驟同“Qt/E應(yīng)用程序在嵌入式設(shè)備中的運行”,只是最后將需要拷貝到開發(fā)板上的文件整理到一個單獨的文件夾里面,然后再下載燒錄到嵌入式設(shè)備的FLASH中。13.6.2 Qt/E應(yīng)用程序在嵌入應(yīng)用程序在嵌入式設(shè)備中的運行式設(shè)備中的運行n要將寫好的Qt/E應(yīng)用程序移植到嵌入式設(shè)備上運行,需要對Qt/Embedded采用交叉編譯的方式重新進行編譯,生成一些適合于嵌入式Linux的函數(shù)庫。移植過程中都是采取宿主機和目標(biāo)機的開發(fā)模式。宿主機是一臺運行Redhat Linux 的PC 機,目標(biāo)機是基于S3C2410的嵌入式設(shè)備。 n先在宿主機上調(diào)試通過后,再移植到目標(biāo)機上。詳細(xì)步驟如下: n(1)Build
19、Qt/Embeddedn(2)修改tmake 配置文件n(3)生成可執(zhí)行文件13.6.3 Qtopia窗口系統(tǒng)在窗口系統(tǒng)在PC虛擬平臺上的運行虛擬平臺上的運行n要在PC平臺上建立起Qtopia 窗口系統(tǒng)的虛擬運行環(huán)境,除了同前面一樣要編譯Build Qt/X11、Build Qvfb(QTEDIR/tools/qvfb)和Build libqte外,就另外還需要編譯Qtopia這個GUI系統(tǒng),13.6.4 Qtopia窗口系統(tǒng)在嵌窗口系統(tǒng)在嵌入式設(shè)備中的運行入式設(shè)備中的運行n實際上就是將Qtopia窗口系統(tǒng)移植到嵌入式設(shè)備中的運行,其前面幾個步驟同“Qt/E應(yīng)用程序在嵌入式設(shè)備中的運行”,只是
20、最后將需要拷貝到開發(fā)板上的文件整理到一個單獨的文件夾里面,然后再下載燒錄到嵌入式設(shè)備的FLASH中。13.7 Qt應(yīng)用程序的開發(fā)應(yīng)用程序的開發(fā)n13.7.1 Qt/E基本控件基本控件1.窗體交互界面。窗體交互界面。Qt 擁有豐富的滿足不同需求擁有豐富的滿足不同需求的窗體,使用起來很靈活,而且它容易被子類的窗體,使用起來很靈活,而且它容易被子類化,以滿足不同的需求。窗口部件是用戶界面化,以滿足不同的需求。窗口部件是用戶界面的一個原子:它從窗口系統(tǒng)接收鼠標(biāo)、鍵盤和的一個原子:它從窗口系統(tǒng)接收鼠標(biāo)、鍵盤和其它事件,并且在屏幕上繪制自己的表現(xiàn)。每其它事件,并且在屏幕上繪制自己的表現(xiàn)。每一個窗口部件都是
21、矩形,并且它們按一個窗口部件都是矩形,并且它們按Z軸順序軸順序排列的。一個窗口部件可以被它的父窗口部件排列的。一個窗口部件可以被它的父窗口部件或者它前面的窗口部件蓋住一部分?;蛘咚懊娴拇翱诓考w住一部分。13.7.1 Qt/E基本控件基本控件n2、對話框、對話框n使用可視化Qt 圖形設(shè)計器設(shè)計工具用戶可以建立自己的對話框。Qt使用布局管理自動設(shè)置窗體和別的窗體之間相對的 尺寸和位置,這樣可以確保對話框能夠最好的利用屏幕上的可用空間。nQt提供很多常用的對話框,例如,選擇文件等。 13.7.2開發(fā)工具開發(fā)工具Qt designer介紹介紹nQt 圖形設(shè)計器是一個具有可視化用戶接口的設(shè)計工具。Q
22、t的應(yīng)用程序可以完全用純命令行下的代碼編寫,也可Qt圖形設(shè)計器這種集成開發(fā)環(huán)境來開發(fā)。 13.7.3 控制臺上的控制臺上的Qt/E應(yīng)用編程應(yīng)用編程n所謂控制臺上的Qt/E應(yīng)用程序,就是指利用Qt/E庫函數(shù)設(shè)計的圖形化應(yīng)用程序,直接在Linux的控制臺下啟動運行,而不是在GUI桌面系統(tǒng)中運行。這里的控制臺可以目標(biāo)機的嵌入式Linux,也是宿主機的桌面Linux,只是后者要先運行qvfb。 n1.一個典型的Qt應(yīng)用程序分析n/hello.cpp精簡的源程序n1 #include n2 #include n3 int main(int argc, char *argv)n4 n5 QApplicat
23、ion app (argc, argv);n6 QLabel *hello = new QLabel(Hello Qt/Embedded!, 0);n7 app.setMainWidget(hello);n8 hello-show();n9 return app.exec();n10 n第1 行和第2 行包含了兩個頭文件,這兩個頭文件中包含了QApplication 和QLabel類的定義。n第5 行創(chuàng)建了一個QApplication 對象,用于管理整個程序的資源,它需要2 個參數(shù),因為Qt 本身需要一些命令行的參數(shù)。n第6 行創(chuàng)建了一個用來顯示Hello Qt/Embedded!的部件。在Q
24、t 中,部件是一個可視化用戶接口,按鈕、菜單、滾動條都是部件的實例。部件可以包含其它部件,例如,一個應(yīng)用程序窗口通常是一個包含QMenuBar、QToolBar、QStatusBar 和其它部件的一個部件。在QLabel 函數(shù)中的參數(shù)0 表示,這是一個窗口而不是嵌入到其它窗口中的部件。n第7 行設(shè)置hello 部件為程序的主部件,當(dāng)用戶關(guān)閉主部件后,應(yīng)用程序?qū)魂P(guān)閉。如果沒有主部件的話,即使用戶關(guān)閉了窗口程序也會在后臺繼續(xù)運行。n第8 行使hello 部件可視,一般來說部件被創(chuàng)建后都是被隱藏的,因此可以在顯示前根據(jù)需要來訂制部件,這樣的好處是可以避免部件創(chuàng)建所造成的閃爍。n第9 行把程序的控
25、制權(quán)交還給Qt,這時候程序進入就緒模式,可是隨時被用戶行為激活,例如點擊鼠標(biāo)、敲擊鍵盤等。n2.完成一個Qt應(yīng)用程序的建立步驟n第一步:新建一個空的工程文件(.pro)n第二步:新建一個用戶接口窗體(.ui)n第三步:生成hello.h和hello.cppn第四步:編寫主函數(shù)main()n第五步:修改工程文件hello.pron第六步:生成Makefile 文件13.7.4 Qtopia上的上的Qt/E應(yīng)用編程應(yīng)用編程n要想將開發(fā)的應(yīng)用程序添加到GUI窗口系統(tǒng)qtopia中運行,則還需要完成下面步驟:n1.準(zhǔn)備好camera程序的圖標(biāo)文件n2.建立.desktop文件,這是最為重要的。n3.運行
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識競賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案