版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 第第13章章 圖形用戶接口(圖形用戶接口(gui) 定義n圖形用戶接口(graphics user interface,gui),又叫桌面系統(tǒng)、窗口管理系統(tǒng)、圖形操作環(huán)境、圖形用戶界面等,是操作系統(tǒng)和用戶的人機(jī)接口。gui極大地方便了非專業(yè)用戶的使用,人們不再需要死記硬背大量的命令,而可以通過窗口、菜單方便地進(jìn)行操作。 13.1圖形用戶接口的層次結(jié)構(gòu)圖形用戶接口的層次結(jié)構(gòu)13.1.1圖形基礎(chǔ)設(shè)施圖形基礎(chǔ)設(shè)施n圖形基礎(chǔ)設(shè)施是一種底層的圖形驅(qū)動(dòng)引擎,一般是由操作系統(tǒng)提供。它是用作其他更高一層圖形或者圖形應(yīng)用程序的基本函數(shù)庫/依賴庫,在其之上可以針對某些特定應(yīng)用需求做進(jìn)一步的封裝。譬如,在對于只需
2、要單任務(wù)的低端應(yīng)用,可以以api函數(shù)的形式,封裝成靜態(tài)或者動(dòng)態(tài)的高級(jí)圖形函數(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高級(jí)圖形函數(shù)庫高級(jí)圖形函數(shù)庫n高級(jí)圖形函數(shù)庫提供的圖形界面編程接口主要分為兩大類,一類只提供基本的畫點(diǎn)繪線、文本區(qū)域處理等,如sdl(standard drawing library);另一類就是以窗口部件(widget,亦稱為控件、部件等)形式,采用面向?qū)ο蠓绞竭M(jìn)行可視化的編
3、程,可用于嵌入式gui系統(tǒng)(需要諸如pthread等消息處理函數(shù)庫的支持)和可以運(yùn)行在gui系統(tǒng)上的應(yīng)用程序的開發(fā),諸如gtk,qt和peg等。13.1.3 gui窗口管理系統(tǒng)窗口管理系統(tǒng)ngui窗口管理系統(tǒng)是一個(gè)非常復(fù)雜的系統(tǒng),很多時(shí)候甚至就類似于一個(gè)操作系統(tǒng),它是嵌入式系統(tǒng)設(shè)計(jì)中迄今為止沒有很好解決的難點(diǎn)之一。目前,在桌面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)中g(shù)ui 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ī)范的開源項(xiàng)目,與之前各種基于x window的圖形用戶環(huán)境不同的是,kde并非針對系統(tǒng)管理員等高級(jí)用戶,而是鎖定為普通的終端用戶,即希望kde能夠包含用戶日常應(yīng)用所需要的所有應(yīng)用程序組件,例如web瀏覽器、電子郵件客戶端、辦公套件
5、、圖形圖像處理軟件等。 13.2.2 gnomengnome是1997年墨西哥年僅26歲的程序員miguel de icaza發(fā)起的開源項(xiàng)目,目前諸如redhat/fedora、suselinux發(fā)行版都默認(rèn)使用它。它功能上的特性和kde類似,并且相對要輕便些 13.3 嵌入式linux系統(tǒng)gui n在現(xiàn)代的嵌入式人機(jī)系統(tǒng)中,人是用戶和主動(dòng)的參與者,能與機(jī)器對話,要求機(jī)器對人的各種動(dòng)作做出響應(yīng)。因此,圖形用戶界面已經(jīng)成為嵌入式應(yīng)用系統(tǒng)研制中的重點(diǎn)之一。典型的嵌入式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)或者實(shí)時(shí)系統(tǒng)的gui系統(tǒng),是國內(nèi)最早出現(xiàn)的、在國際上有一定知名度的幾個(gè)自由軟件項(xiàng)目之一,最先是由原清華大學(xué)教師魏永明先生主持開發(fā),現(xiàn)由北京飛漫軟件技術(shù)有限公司進(jìn)行商業(yè)化維護(hù)和運(yùn)作。自1999 年初以遵循 gpl 協(xié)議發(fā)布第一個(gè)版本以來,minigui 已廣泛應(yīng)用于手持信息終端、機(jī)頂盒、工業(yè)控制系統(tǒng)及工業(yè)儀表、便攜式多媒體播放機(jī)、查詢終端等產(chǎn)品和領(lǐng)域。13.3.2 qtopianqtopia是嵌入式gui窗口系統(tǒng),也叫做嵌入式linux的桌面系統(tǒng),是tro
7、lltech 面向嵌入式設(shè)備的qt掌上機(jī)環(huán)境(qt palmtop environment,qpe)。它建立在qt/ embedded(即qt/e)之上,基于qt/e開發(fā)出來的程序就可以放到這個(gè)桌面上,為開發(fā)提供了一個(gè)類似于windows這樣易于使用的界面。qtopia分為開源的pda版本qtopia和收費(fèi)的手機(jī)版qtopia,前者提供pda的桌面系統(tǒng)基本源代碼,后者還包括手機(jī)模塊代碼等。 13.3.3 nano-xnnano-x的前身就是century software 推出的開源項(xiàng)目microwindows。它主要采用c語言進(jìn)行開發(fā),采用c/s體系結(jié)構(gòu),提供了相對完善的圖形功能,并且具有分
8、層設(shè)計(jì)。最底層是屏幕和輸入設(shè)備驅(qū)動(dòng)程序(關(guān)于鍵盤或鼠標(biāo))來與實(shí)際硬件交互。在中間層,可移植的圖形引擎提供對線的繪制、區(qū)域的填充、多邊形、裁剪以及顏色模型的支持。 13.4 minigui的開發(fā)初步的開發(fā)初步nminigui具有良好的軟件架構(gòu),通過抽象層將minigui 上層和底層操作系統(tǒng)隔離開來。如圖13.4.1所示,基于minigui 的應(yīng)用程序一般通過ansi c 庫、操作系統(tǒng)和驅(qū)動(dòng)程序接口以及minigui 自身提供的api 來實(shí)現(xiàn)自己的功能;minigui 中的“可移植層”可將特定操作系統(tǒng)及底層硬件的細(xì)節(jié)隱藏起來,而上層應(yīng)用程序則無需關(guān)心底層的硬件平臺(tái)輸出和輸入設(shè)備。13.4 mini
9、gui的開發(fā)初步的開發(fā)初步13.4.1 minigui 的開發(fā)環(huán)境 nminigui 的開發(fā)可以在linux 或windows操作系統(tǒng)下進(jìn)行。由于minigui 完全用c 來編寫,具有非常好的移植性,也使得minigui 應(yīng)用程序的交叉編譯工作十分方便。一般而言,為嵌入式設(shè)備編寫的應(yīng)用程序可以在任何安裝在針對該設(shè)備的交叉編譯工具鏈的平臺(tái)上進(jìn)行編譯,比如在桌面linux 環(huán)境下安裝針對arm cpu平臺(tái)交叉編譯器(arm-linux-gcc等),然后再對應(yīng)用程序進(jìn)行交叉編譯。 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文件),然后進(jìn)入helloworld文件夾找到helloworld.dsw,用vc+打開;n 然后在工程菜單內(nèi)設(shè)置選擇c/c分類中選擇預(yù)處理n在包含路徑中填入./include,./include/minigui,./include/pthread-win32n 在linke目錄下選擇general,然后把lib里的庫文件加在對象/庫模塊的后面,也就是那兩個(gè)min
11、igui.lib pthreadvc1.lib,n 最后在分類中選擇input把庫文件地址連接進(jìn)去也就是./libn 打開wvfb文件夾下的wvfb.exe,然后在vc+中執(zhí)行helloworld .n這里要注意的是,minigui for win32是預(yù)編譯的函數(shù)庫,因此,其中的功能特性是固定的,包括編譯時(shí)選項(xiàng)和運(yùn)行時(shí)選項(xiàng)。 13.4.2 minigui的移植的移植n1. pc 機(jī)上配置,編譯,安裝,運(yùn)行機(jī)上配置,編譯,安裝,運(yùn)行miniguin(1)在redhat9.0 上配置framebuffern要激活vesa frame buffer 驅(qū)動(dòng)程序,需要修改/boot/grub/menu
12、.lst 文件,并在kernel打頭的一行添加vga=0 x0317.n其中red hat linux (2.4.208,framebuffer)就是設(shè)置了vesa framebuffer 的引導(dǎo)選項(xiàng)。 n(2)在)在pc上編譯并安裝上編譯并安裝minigui開發(fā)開發(fā)包包n第一步,在pc 上編譯并安裝libminiguin第二步,在pc 上安裝minigui 的資源n第三步,編譯應(yīng)用程序例子n(3)redhat上minigui 的運(yùn)行n由于必須要在控制臺(tái)模式才能運(yùn)行minigui。要啟動(dòng)控制臺(tái),按住ctrlalt 的同時(shí),n按f1f6 中的任意一個(gè)均可,然后登錄系統(tǒng),進(jìn)入sample 目錄,直
13、接運(yùn)行即可。n2. 交叉編譯,并在嵌入式目標(biāo)機(jī)上運(yùn)行交叉編譯,并在嵌入式目標(biāo)機(jī)上運(yùn)行miniguin(1) 交叉編譯libminiguin(2) 安裝minigui 資源文件n(3) 編譯應(yīng)用程序例子n(4) 在嵌入式目標(biāo)機(jī)上運(yùn)行minigui13.4.3 minigui應(yīng)用編程庫應(yīng)用編程庫nminigui在嵌入式產(chǎn)品中移植好后,就要進(jì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、同時(shí)還為開發(fā)者提供了自定義控件的接口,并能方便地對已有控件進(jìn)行擴(kuò)展。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ū)動(dòng)程序接口。這種接口采用內(nèi)存映射(mmap)系統(tǒng)調(diào)用,將顯示設(shè)備抽象為幀緩沖區(qū)。用戶可以將它看成是顯示內(nèi)存的一個(gè)映象,將其映射到進(jìn)程地址空間之后,就可以直接進(jìn)行讀寫操作了,而寫操作可以立即反映在屏幕上。framebuffer驅(qū)動(dòng)程序是最重要的驅(qū)動(dòng)程序之一,正是這個(gè)驅(qū)動(dòng)程序才能使系統(tǒng)屏幕顯示內(nèi)容。 13.5.2 qvfb虛擬運(yùn)行環(huán)境虛擬運(yùn)行環(huán)境nqvfb是“qt/embedded virtual framebuffer”的簡稱,即qt/e的虛擬幀緩沖,是在桌面linux中為嵌入式圖形應(yīng)用程序提供一個(gè)虛擬的運(yùn)行環(huán)境。它實(shí)際上就是由一個(gè)x11的應(yīng)用程序在共享的內(nèi)存去也中來模擬了一個(gè)緩沖幀,通過指
16、定顯示設(shè)備的寬度,高度和顏色深度,虛擬出來的緩沖幀將和物理的嵌入式顯示設(shè)備在每個(gè)像素上保持一致。 n使用qvfb的方法如下:n 將qt/e源代碼中的qvfb目錄作為正常的x86 pc平臺(tái)的qt/x11應(yīng)用程序來編譯,而不要做為qt/e的應(yīng)用程序來編譯。 n 這時(shí)就可以運(yùn)行一些已經(jīng)編譯后的二進(jìn)制qt/e應(yīng)用程序,命令行中要用參數(shù)-qws表示將它作為qt/e服務(wù)器。13.6 qt開發(fā)及運(yùn)行環(huán)境的創(chuàng)建開發(fā)及運(yùn)行環(huán)境的創(chuàng)建n13.6.1 qt/e應(yīng)用程序在應(yīng)用程序在pc虛擬平臺(tái)上虛擬平臺(tái)上的運(yùn)行的運(yùn)行n1、 qt/e應(yīng)用程序在pc虛擬平臺(tái)上的運(yùn)行n首先首先,下載qt開發(fā)環(huán)境的源程序包。 n2 、qt/
17、e應(yīng)用程序在嵌入式設(shè)備中的運(yùn)行 n要將寫好的qt/e應(yīng)用程序移植到嵌入式設(shè)備上運(yùn)行,需要對qt/embedded采用交叉編譯的方式重新進(jìn)行編譯,生成一些適合于嵌入式linux的函數(shù)庫。 n3、 qtopia窗口系統(tǒng)在pc虛擬平臺(tái)上的運(yùn)行 n要在pc平臺(tái)上建立起qtopia 窗口系統(tǒng)的虛擬運(yùn)行環(huán)境,除了同前面一樣要編譯build qt/x11、build qvfb(qtedir/tools/qvfb)和build libqte外,就另外還需要編譯qtopia這個(gè)gui系統(tǒng) 。n4、 qtopia窗口系統(tǒng)在嵌入式設(shè)備中的運(yùn)行 n實(shí)際上就是將qtopia窗口系統(tǒng)移植到嵌入式設(shè)備中的運(yùn)行,其前面幾個(gè)步
18、驟同“qt/e應(yīng)用程序在嵌入式設(shè)備中的運(yùn)行”,只是最后將需要拷貝到開發(fā)板上的文件整理到一個(gè)單獨(dú)的文件夾里面,然后再下載燒錄到嵌入式設(shè)備的flash中。13.6.2 qt/e應(yīng)用程序在嵌入應(yīng)用程序在嵌入式設(shè)備中的運(yùn)行式設(shè)備中的運(yùn)行n要將寫好的qt/e應(yīng)用程序移植到嵌入式設(shè)備上運(yùn)行,需要對qt/embedded采用交叉編譯的方式重新進(jìn)行編譯,生成一些適合于嵌入式linux的函數(shù)庫。移植過程中都是采取宿主機(jī)和目標(biāo)機(jī)的開發(fā)模式。宿主機(jī)是一臺(tái)運(yùn)行redhat linux 的pc 機(jī),目標(biāo)機(jī)是基于s3c2410的嵌入式設(shè)備。 n先在宿主機(jī)上調(diào)試通過后,再移植到目標(biāo)機(jī)上。詳細(xì)步驟如下: n(1)build
19、qt/embeddedn(2)修改tmake 配置文件n(3)生成可執(zhí)行文件13.6.3 qtopia窗口系統(tǒng)在窗口系統(tǒng)在pc虛擬平臺(tái)上的運(yùn)行虛擬平臺(tái)上的運(yùn)行n要在pc平臺(tái)上建立起qtopia 窗口系統(tǒng)的虛擬運(yùn)行環(huán)境,除了同前面一樣要編譯build qt/x11、build qvfb(qtedir/tools/qvfb)和build libqte外,就另外還需要編譯qtopia這個(gè)gui系統(tǒng),13.6.4 qtopia窗口系統(tǒng)在嵌窗口系統(tǒng)在嵌入式設(shè)備中的運(yùn)行入式設(shè)備中的運(yùn)行n實(shí)際上就是將qtopia窗口系統(tǒng)移植到嵌入式設(shè)備中的運(yùn)行,其前面幾個(gè)步驟同“qt/e應(yīng)用程序在嵌入式設(shè)備中的運(yùn)行”,只是
20、最后將需要拷貝到開發(fā)板上的文件整理到一個(gè)單獨(dú)的文件夾里面,然后再下載燒錄到嵌入式設(shè)備的flash中。13.7 qt應(yīng)用程序的開發(fā)應(yīng)用程序的開發(fā)n13.7.1 qt/e基本控件基本控件1.窗體交互界面。窗體交互界面。qt 擁有豐富的滿足不同需求擁有豐富的滿足不同需求的窗體,使用起來很靈活,而且它容易被子類的窗體,使用起來很靈活,而且它容易被子類化,以滿足不同的需求。窗口部件是用戶界面化,以滿足不同的需求。窗口部件是用戶界面的一個(gè)原子:它從窗口系統(tǒng)接收鼠標(biāo)、鍵盤和的一個(gè)原子:它從窗口系統(tǒng)接收鼠標(biāo)、鍵盤和其它事件,并且在屏幕上繪制自己的表現(xiàn)。每其它事件,并且在屏幕上繪制自己的表現(xiàn)。每一個(gè)窗口部件都是
21、矩形,并且它們按一個(gè)窗口部件都是矩形,并且它們按z軸順序軸順序排列的。一個(gè)窗口部件可以被它的父窗口部件排列的。一個(gè)窗口部件可以被它的父窗口部件或者它前面的窗口部件蓋住一部分?;蛘咚懊娴拇翱诓考w住一部分。13.7.1 qt/e基本控件基本控件n2、對話框、對話框n使用可視化qt 圖形設(shè)計(jì)器設(shè)計(jì)工具用戶可以建立自己的對話框。qt使用布局管理自動(dòng)設(shè)置窗體和別的窗體之間相對的 尺寸和位置,這樣可以確保對話框能夠最好的利用屏幕上的可用空間。nqt提供很多常用的對話框,例如,選擇文件等。 13.7.2開發(fā)工具開發(fā)工具qt designer介紹介紹nqt 圖形設(shè)計(jì)器是一個(gè)具有可視化用戶接口的設(shè)計(jì)工具。q
22、t的應(yīng)用程序可以完全用純命令行下的代碼編寫,也可qt圖形設(shè)計(jì)器這種集成開發(fā)環(huán)境來開發(fā)。 13.7.3 控制臺(tái)上的控制臺(tái)上的qt/e應(yīng)用編程應(yīng)用編程n所謂控制臺(tái)上的qt/e應(yīng)用程序,就是指利用qt/e庫函數(shù)設(shè)計(jì)的圖形化應(yīng)用程序,直接在linux的控制臺(tái)下啟動(dòng)運(yùn)行,而不是在gui桌面系統(tǒng)中運(yùn)行。這里的控制臺(tái)可以目標(biāo)機(jī)的嵌入式linux,也是宿主機(jī)的桌面linux,只是后者要先運(yùn)行qvfb。 n1.一個(gè)典型的qt應(yīng)用程序分析n/hello.cpp精簡的源程序n1 #include n2 #include n3 int main(int argc, char *argv)n4 n5 qapplication 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
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年短視頻內(nèi)容創(chuàng)作與版權(quán)許可合同
- 2024沙場資源綜合利用開發(fā)承包合同3篇
- 2024年餐飲投資合伙合同細(xì)則一
- 2024校園活動(dòng)策劃與實(shí)施服務(wù)合同
- 2024年金融科技產(chǎn)品定制開發(fā)服務(wù)協(xié)議3篇
- 2024年金融機(jī)構(gòu)間借款保證合同書2篇
- 2023-2024年中級(jí)經(jīng)濟(jì)師之中級(jí)經(jīng)濟(jì)師經(jīng)濟(jì)基礎(chǔ)知識(shí)試題(附答案)
- 2024版臨時(shí)場地租賃合同空白
- 2024年石膏板行業(yè)標(biāo)準(zhǔn)購銷協(xié)議格式
- 2024年電話客服團(tuán)隊(duì)勞動(dòng)合同
- DL∕T 802.2-2017 電力電纜用導(dǎo)管 第2部分:玻璃纖維增強(qiáng)塑料電纜導(dǎo)管
- 錨索張拉記錄表
- 全國計(jì)算機(jī)等級(jí)考試二級(jí)Python復(fù)習(xí)備考題庫(含答案)
- 《生物安全培訓(xùn)》課件-2024鮮版
- 部編人教版數(shù)學(xué)二年級(jí)下冊課前預(yù)習(xí)單
- 每日食品安全檢查記錄表
- JTG-D40-2011公路水泥混凝土路面設(shè)計(jì)規(guī)范
- 2024年4月自考02799獸醫(yī)臨床醫(yī)學(xué)試題
- 2024年全國高考體育單招考試語文試卷試題(含答案詳解)
- 市政工程勞動(dòng)力計(jì)劃
- 2023年七年級(jí)語文上冊期末測試卷(完美版)
評(píng)論
0/150
提交評(píng)論