版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、搬岳北農(nóng)林千找大學(xué)基于嵌入式Linux統(tǒng)的 Qt圖片查看器的設(shè)計(jì)學(xué)院(系): 機(jī)械與電子工程學(xué)院專業(yè)年級(jí):電子信息工程10級(jí)1班學(xué)生姓名:學(xué)號(hào):指導(dǎo)教師:王東完成日期:20XX年7月08日目錄 TOC o 1-5 h z HYPERLINK l bookmark6 o Current Document .設(shè)計(jì)目的和方法1 HYPERLINK l bookmark8 o Current Document .嵌入式Linux系統(tǒng)GUI設(shè)計(jì)分析21圖形用戶界面概述22GUI的組成23Qt/Embedded分析3 HYPERLINK l bookmark10 o Current Document 3
2、QT技術(shù)61QT的優(yōu)勢(shì)62QT圖形用戶界面73QTCreator的特點(diǎn)以及優(yōu)勢(shì)7 HYPERLINK l bookmark12 o Current Document 4圖片查看器程序的移植過程81 移植 QT8QT源代碼編譯 8交叉編譯92程序開發(fā)10主程序中創(chuàng)建類10制定程序框架10編輯調(diào)試程序104.3圖片查看器程序設(shè)計(jì)114.2.1預(yù)期達(dá)到的界面模型114.2.1源程序124. 3設(shè)計(jì)成果21 HYPERLINK l bookmark14 o Current Document 5結(jié)論44參考文獻(xiàn)461設(shè)計(jì)的目的和方法經(jīng)常使用電腦的同學(xué)都知道,windows系統(tǒng)自帶的圖片查看器查看圖片的
3、方式比較直接,包括放大縮小翻轉(zhuǎn)等基本功能。為了使圖片的查看方式靈活化,本項(xiàng)目預(yù)設(shè)計(jì)出一款功能多樣的圖片查看 器。擬設(shè)計(jì)的一款圖片查看器基于嵌入式Linux系統(tǒng)、利用Qt開發(fā),其實(shí)現(xiàn)的 功能在基礎(chǔ)的圖片查看器的功能如放大縮小之外另增加了圖片的任意角度旋 轉(zhuǎn)、斜切、位移等功能。2嵌入式Linux系統(tǒng)GUI設(shè)計(jì)分析嵌入式系統(tǒng)的圖形用戶界面GUI是嵌入式系統(tǒng)與人與計(jì)算機(jī)之間傳遞、交 換信息的媒介和對(duì)話接口,是計(jì)算機(jī)的重要組成部分,用戶界面的發(fā)展經(jīng)歷了 命令語言界面、菜單界面、圖形用戶界面和直接操作界面等過程。圖形用戶界面概述所謂GUI (Graphics User Interface)就是圖形用戶界面
4、,是指計(jì)算機(jī)與 其使用者之間的對(duì)話接口,是計(jì)算機(jī)系統(tǒng)的重要組成部分。一個(gè)圖形用戶界面系統(tǒng)通常由三個(gè)基本層次組成,即顯示模型、窗口模型 和用戶模型。用戶模型包含了顯示和交互的主要特征。圖3-1給出了圖形用戶 界面系統(tǒng)的結(jié)構(gòu)。 桌面管理系統(tǒng) TOC o 1-5 h z 用戶模型一窗口模型顯示模型一操作系統(tǒng)硬件平臺(tái)一圖3T圖形用戶界面系統(tǒng)的結(jié)構(gòu)當(dāng)前嵌入式Linux系統(tǒng)迫切需要輕量級(jí)的GUI,幸運(yùn)的是,不少?gòu)S家和開放 源碼組織已經(jīng)提供了這樣的 GUI,如 Qt/Embedded, Microwindows, MiniGUI 等。盡管已具備了基本的輕量級(jí)GUI系統(tǒng),但由于Flash磁盤空間、內(nèi)存資源 和
5、功耗的限制,嵌入式Linux系統(tǒng)上的GUI應(yīng)用軟件設(shè)計(jì)很大程序上不同于桌 面系統(tǒng)應(yīng)用軟件的開發(fā)。比如,應(yīng)用程序的用戶界面就需要精心定制,來方便用戶在較小尺寸的屏幕上輸入輸出;乂如,嵌入式系統(tǒng)上的應(yīng)用程序一般不允 許崩潰,所以必須采取安全有效的內(nèi)存管理策略保證程序的可靠性。嵌入式系統(tǒng)的GUI簡(jiǎn)介嵌入式GUI就是在嵌入式系統(tǒng)中為特定的硬件設(shè)備或環(huán)境而設(shè)計(jì)的圖形用 戶界面系統(tǒng)。所以嵌入式GUI不但要有GUI的特征,在實(shí)際應(yīng)用中,嵌入式系 統(tǒng)對(duì)它來說還有如下的基本要求:占用資源少,高性能,高可靠性,可配置下面,我們將簡(jiǎn)要介紹集中常見的嵌入式系統(tǒng)的GUI,并對(duì)他們的優(yōu)缺點(diǎn) 進(jìn)行比較。OpenGUIOpe
6、nGUI基于一個(gè)用匯編實(shí)現(xiàn)的x86圖形內(nèi)核,提供了一個(gè)高層的C/C+圖 形/窗口接口。它和MiniGUI一樣,也是使用LGPL許可證。OpenGUI提供了 2 維繪圖原語,消息驅(qū)動(dòng)的API、BMP文件格式支持。OpenGUI功能強(qiáng)大、使用方 便。用戶甚至可以實(shí)現(xiàn)Borland BGI風(fēng)格的應(yīng)用程序,或者是QT風(fēng)格的窗口。 OpenGUI支持鼠標(biāo)和鍵盤的事件。在Linux上基于Framebuff er 3或者SVGALib4 實(shí)現(xiàn)繪圖。Linux下OpenGUI也支持Mesa3D。顏色模型方面,OpenGUI已經(jīng)支 持8、16、32位模型。由于其基于匯編實(shí)現(xiàn)的內(nèi)核并利用MMX指令進(jìn)行了優(yōu)化,Op
7、enGUI運(yùn)行速 度非??欤梢杂肬ltraFast形容,它支持32位的機(jī)器,能夠在MS-DOS, QNX5和Linux下運(yùn)行,主要用來在這些系統(tǒng)中開發(fā)圖形應(yīng)用程序和游戲。 OpenGUI非常穩(wěn)定,但可移植性因?yàn)槠鋬?nèi)核使用匯編語言實(shí)現(xiàn)會(huì)受到影響。MiniGUIMiniGUI是Linux控制臺(tái)上運(yùn)行的,基于SVGALib和LinuxThread6庫(kù) 的多窗口圖形用戶界面支持系統(tǒng)。MiniGUI采用了類Win32的API接口,實(shí) 現(xiàn)了簡(jiǎn)化的類Windows 98風(fēng)格的圖形用戶界面。MiniGUI也是一個(gè)窗口系 統(tǒng),他的主要組成元素是窗口,在這個(gè)基礎(chǔ)上MiniGUI中的窗口可以基本分四 類,分別為主
8、窗口、對(duì)話框、控件和主窗口中的窗片。MiniGUI中的主窗口和 Windows應(yīng)用程序的主窗口概念類似,MiniGUI中的每個(gè)主窗口對(duì)應(yīng)于一個(gè)單 獨(dú)的線程,通過函數(shù)調(diào)用可建立主窗口以及對(duì)應(yīng)的線程。每個(gè)線程有一個(gè)消息 隊(duì)列,主窗口從這一消息隊(duì)列中獲取消息并由窗口過程(回調(diào)函數(shù))進(jìn)行處 理。MiniGUI的目標(biāo)是保持現(xiàn)有小巧的特點(diǎn),在Linux控制臺(tái)上提供一個(gè)小 的窗口系統(tǒng)支持,“小”是MiniGUI的特色。同時(shí)MiniGUI 乂將盡力與微軟的 MSWindows API保持兼容。這么定位是希望MiniGUI可以在未來以Linux為基 礎(chǔ)的應(yīng)用平臺(tái)上提供一個(gè)簡(jiǎn)單可行的GUI支持系統(tǒng),讓MiniGU
9、I可以應(yīng)用在 Windows CE可以應(yīng)用的任何場(chǎng)合。QT/EmbeddedQt是Trolltech公司的一個(gè)產(chǎn)品,是一個(gè)多平臺(tái)的C+圖形用戶界面應(yīng)用 程序框架。它提供給應(yīng)用程序開發(fā)者建立藝術(shù)級(jí)的圖形用戶界面所需的所有功 能。Qt是完全面向?qū)ο蟮暮苋菀讛U(kuò)展,并且允許真正地組件編程。自從1996 年早些時(shí)候,Qt進(jìn)入商業(yè)領(lǐng)域,它已經(jīng)成為全世界范圍內(nèi)數(shù)千種成功的應(yīng)用程 序的基礎(chǔ)。Qt也是流行的Linux桌面環(huán)境KDE的基礎(chǔ),KDE是所有主要的 Linux發(fā)行版的一個(gè)標(biāo)準(zhǔn)組件。Qt/Embedded是Trolltech公司的另一個(gè)產(chǎn)品,雖然走Open Source開發(fā) 路線,采用GPL授權(quán),但商業(yè)用
10、的要付費(fèi)。Qt/Embedded是Qt的嵌入式Linux 端口,是完整的自包含C+GUI和基于Linux的嵌入式平臺(tái)開發(fā)工具。大范圍的 Qt/Embedded API可用于多種開發(fā)項(xiàng)目。Qt/Embedded可以開發(fā)市場(chǎng)上多種類型 的產(chǎn)品和設(shè)備,從消費(fèi)電器(移動(dòng)電話、聯(lián)網(wǎng)板和set top盒)到工業(yè)控制設(shè) 備(如醫(yī)學(xué)成像設(shè)備、移動(dòng)信息系統(tǒng)等)。這套環(huán)境提供的API和Qt/Windows 與Qt/Xll相同,但不需要使用到XII,取而代之的提供從硬件接口、繪圖程序 庫(kù)和完整的GUI工具。Qt/Embedded對(duì)存儲(chǔ)內(nèi)存的需求約在800kB到3MB (Intel下x86)。其另一個(gè)特點(diǎn)就是跨平臺(tái),
11、用Qt API開發(fā)出來的應(yīng)用程 序,可以在不同的操作系統(tǒng)和視窗系統(tǒng)上執(zhí)行,如圖3-2所示。GUI的組成桌面:在啟動(dòng)時(shí)顯示,也是界面中最底層,有時(shí)也指代包括窗口、文件瀏 覽器在內(nèi)的“桌面環(huán)境”。在桌面上由于可以重疊顯示窗口,因此可以實(shí)現(xiàn)多 任務(wù)化。一般的界面中,桌面上放有各種應(yīng)用程序和數(shù)據(jù)的圖標(biāo),用戶可以依 此開始工作。桌面與既存的文件夾構(gòu)成里面相違背,所以要以特殊位置的文件 夾的參照形式來定義內(nèi)容。比如在微軟公司的Windows XP系統(tǒng)中,各種用戶的 桌面內(nèi)容實(shí)際保存在系統(tǒng)盤(默認(rèn)為C盤):Documents and Settings用戶 名八桌面文件夾里。墻紙,即桌面背景。可以設(shè)置為各種圖
12、片和各種附件, 成為視覺美觀的重要因素之一。視窗:應(yīng)用程序?yàn)槭褂脭?shù)據(jù)而在圖形用戶界面中設(shè)置的基本單元。應(yīng)用程 序和數(shù)據(jù)在窗口內(nèi)實(shí)現(xiàn)一體化。在窗口中,用戶可以在窗口中操作應(yīng)用程序, 進(jìn)行數(shù)據(jù)的管理、生成和編輯。通常在窗口四周設(shè)有菜單、圖標(biāo),數(shù)據(jù)放在中央。在窗口中,根據(jù)各種數(shù)據(jù)/應(yīng)用程序的內(nèi)容設(shè)有標(biāo)題欄,一般放在窗口的最 上方,并在其中設(shè)有最大化、最小化(隱藏窗口,并非消除數(shù)據(jù))、最前面、縮 進(jìn)(僅顯示標(biāo)題欄)等動(dòng)作按鈕,可以簡(jiǎn)單地對(duì)窗口進(jìn)行操作。單一文件界面:在窗口中,一個(gè)數(shù)據(jù)在一個(gè)窗口內(nèi)完成的方式。在這種情 況下,數(shù)據(jù)和顯示窗口的數(shù)量是一樣的。若要在其他應(yīng)用程序的窗口使用數(shù) 據(jù),將相應(yīng)生成新的
13、窗口。因此窗口數(shù)量多,管理復(fù)雜。多文件界面:在一個(gè)窗口之內(nèi)進(jìn)行多個(gè)數(shù)據(jù)管理的方式。這種情況下,窗 口的管理簡(jiǎn)單化,但是操作變?yōu)殡p重管理。標(biāo)簽:多文件界面的數(shù)據(jù)管理方式中使用的一種界面,將數(shù)據(jù)的標(biāo)題在窗 口中并排,通過選擇標(biāo)簽標(biāo)題顯示必要的數(shù)據(jù),這樣使得接入數(shù)據(jù)方式變得更 為便捷。上述中,多文件界面主要是微軟視窗系統(tǒng)采用。而在其他環(huán)境中,通常多 是單文件界面,所以無所謂單一/多文件界面的稱呼問題。菜單:將系統(tǒng)可以執(zhí)行的命令以階層的方式顯示出來的一個(gè)界面。一般置 于畫面的最上方或者最下方,應(yīng)用程序能使用的所有命令幾乎全部都能放入。 重要程度一般是從左到右,越往后重要度越低。命定的層次根據(jù)應(yīng)用程序的
14、不 同而不同,一般重視文件的操作、編輯功能,因此放在最左邊,然后往右有各 種設(shè)置等操作,最右.邊往往設(shè)有幫助。一般使用鼠標(biāo)的第一按鈕進(jìn)行操作。即時(shí)菜單(乂稱功能表):與應(yīng)用程序準(zhǔn)備好的層次菜單不同,在菜單欄以 外的地方,通過鼠標(biāo)的第二按鈕調(diào)出的菜單稱為“即時(shí)菜單”。根據(jù)調(diào)出位置 的不同,菜單內(nèi)容即時(shí)變化,列出所指示的對(duì)象目前可以進(jìn)行的操作。圖標(biāo):顯示在管理數(shù)據(jù)的應(yīng)用程序中的數(shù)據(jù),或者顯示應(yīng)用程序本身。數(shù) 據(jù)管理程序,即在文件夾中用戶數(shù)據(jù)的管理、進(jìn)行特定數(shù)據(jù)管理的程序的情況 下,數(shù)據(jù)通過圖標(biāo)顯示出來。通常情況下顯示的是數(shù)據(jù)的內(nèi)容或者與數(shù)據(jù)相關(guān) 聯(lián)的應(yīng)用程序的圖案。另外,點(diǎn)擊數(shù)據(jù)的圖標(biāo),一般可以之
15、間完成啟動(dòng)相關(guān)應(yīng) 用程序以后再顯示數(shù)據(jù)本身這兩個(gè)步驟的工作。應(yīng)用程序的圖標(biāo)只能用于啟動(dòng)應(yīng)用程序。按鈕:菜單中,利用程度高的命令用圖形表示出來,配置在應(yīng)用程序中, 成為按鈕。應(yīng)用程序中的按鈕,通??梢源娌藛巍R恍┦褂贸潭雀叩拿?, 不必通過菜單一層層翻動(dòng)才能調(diào)出,極大提高了工作效率。但是,各種用戶使 用的命令頻率是不一樣的,因此這種配置一般都是可以由用戶自定義編輯。3 QT技術(shù)Qt是諾基亞開發(fā)的一個(gè)跨平臺(tái)的C+圖形用戶界面應(yīng)用程序框架。它提供 給應(yīng)用程序開發(fā)者建立藝術(shù)級(jí)的圖形用戶界面所需的所用功能。Qt是完全面向 對(duì)象的,很容易擴(kuò)展,并且允許真正地組件編程。自從1996年早些時(shí)候,Qt 進(jìn)入商
16、業(yè)領(lǐng)域,它已經(jīng)成為全世界范圍內(nèi)數(shù)千種成功的應(yīng)用程序的基礎(chǔ)。Qt也 是流行的Linux桌面環(huán)境KDE的基礎(chǔ)。基本上,Qt同X Window上的 Motif, Openwin, GTK 等圖形界 面庫(kù)和 Windows 平臺(tái)上的 MFC, OWL, VCL, ATL是同類型的東西,但Qt具有優(yōu)良的跨平臺(tái)特性、面向?qū)ο?、豐富的 API、大量的開發(fā)文檔等優(yōu)點(diǎn)。QT的優(yōu)勢(shì)面向?qū)ο螅篞t的良好封裝機(jī)制使得Qt的模塊化程度非常高,可重用性 較好,對(duì)于用戶開發(fā)來說是非常方便的。Qt提供了一種稱為signals/slots 的安全類型來替代callback,這使得各個(gè)元件之間的協(xié)同工作變得十分簡(jiǎn) 單。豐富的AP
17、I: Qt包括多達(dá)250個(gè)以上的C+類,還提供基于模板的 collections, serialization, file, I/Odevice, directory, management ,date/time類。甚至還包括正則表達(dá)式的處理功能。支持2D/3D圖形渲染,支持OpenGL ,大量的開發(fā)文檔,XML支持, Webkit引擎的集成,可以實(shí)現(xiàn)本地界面與Web內(nèi)容的無縫集成但是真正使得Qt在自由軟件界的眾多Widgets (如Lesstif, Gtk, EZWGL, Xforms, fltk等等)中脫穎而出的還是基于Qt的重量級(jí)軟件KDE。QT圖形用戶界面Qt的圖形用戶界面的基礎(chǔ)是QW
18、idgeto Qt中所有類型的GUI組件如按鈕、 標(biāo)簽、工具欄等都派生自QWidget,而QWidget本身則為QObject的子類。 Widget負(fù)責(zé)接收鼠標(biāo),鍵盤和來自窗口系統(tǒng)的其他事件,并描繪了自身顯示在 屏幕上。每一個(gè)GUI組件都是一個(gè)widget, widget還可以作為容器,在其內(nèi)包 含其他Widget oQWidget不是一個(gè)抽象類。并且可以被放置在一個(gè)已存在的用戶界面中;若 是Widget沒有指定父Widget,當(dāng)它顯示時(shí)就是一個(gè)獨(dú)立的視窗、或是一個(gè)頂 層widget o QWidget顯示能力包含了透明化及Double-Buffering。Qt提供一種 托管機(jī)制,當(dāng)Widge
19、t于創(chuàng)建時(shí)指定父對(duì)象,就可把自己的生命周期交給上層對(duì) 象管理,當(dāng)上層對(duì)象被釋放時(shí),自己也被釋放。確保對(duì)象不再使用時(shí)都會(huì)被刪 除。3 QT Creator的特點(diǎn)以及優(yōu)勢(shì)Qt Creator是跨平臺(tái)的Qt IDE, Qt Creator是Qt被Nokia收購(gòu)后推 出的一款新的輕量級(jí)集成開發(fā)環(huán)境(IDE)o此IDE能夠跨平臺(tái)運(yùn)行,支持的系 統(tǒng)包括Linux (32位及64位)、Mac OS X以及Windowso根據(jù)官方描述,Qt Creator的設(shè)計(jì)目標(biāo)是使開發(fā)人員能夠利用Qt這個(gè)應(yīng)用程序框架更加快速及 輕易的完成開發(fā)任務(wù)。在功能方面,Qt Creator包括項(xiàng)目生成向?qū)?、高?jí)的C+代碼編輯器、
20、瀏覽文件及類的工具、集成了 Qt Designer Qt Assistant Qt Linguist、圖 形化的GDB調(diào)試前端,集成qmake構(gòu)建工具等。Qt Creator主要是為了幫助新Qt用戶更快速入門并運(yùn)行項(xiàng)目,還可提高 有經(jīng)驗(yàn)的Qt開發(fā)人員的工作效率。使用強(qiáng)大的C+代碼編輯器可快速編寫 代碼,語法標(biāo)識(shí)和代碼完成功能輸入時(shí)進(jìn)行靜態(tài)代碼檢驗(yàn)以及提示樣式上下文 相關(guān)的幫助代碼折疊括號(hào)匹配和括號(hào)選擇模式高級(jí)編輯功能。使用瀏覽工具管理源代碼,集成了領(lǐng)先的版本控制軟件,包括Git、 Perforce和Subversion開放式文件,無須知曉確切的名稱或位置搜索類和文 件跨不同位置或文件沿用符號(hào)在
21、頭文件和源文件,或在聲明和定義之間切換。為Qt跨平臺(tái)開發(fā)人員的需求而量身定制,集成了特定于Qt的功能,如 信號(hào)與槽(Signals & Slots)圖示調(diào)試器,對(duì)Qt類結(jié)構(gòu)可一目了然集成了 Qt Designer可視化布局和格式構(gòu)建器只需單擊一下就可生成和運(yùn)行Qt項(xiàng) 目。4圖片查看器程序的移植過程盡管已經(jīng)圖片查看器出現(xiàn)很多年,但是它對(duì)很多人來說還是個(gè)新鮮事物。 圖片查看器通過液晶的屏幕來顯示數(shù)字相片,可以通過讀卡器接口從SD卡獲取 數(shù)字相片信息,并可設(shè)置循環(huán)顯示方式,比普通相框更加靈活多變,也給日益 增多的數(shù)碼相片提供一個(gè)新的展示空間。移植QTQT是一個(gè)跨平臺(tái)的C+圖形用戶界面庫(kù),是專為小型設(shè)
22、備提供豐富的窗口 小部件(Widgets)支持串口部件的定制,可以為用戶提供漂亮的圖形界面。QT 是開源的圖形界面軟件,也是最流行的圖形界面之一。QT源代碼編譯第一步:在 ftp: /ftp. trolltech/qt/source/下載 QT 源代碼 qt- embedded-free-3. 3. 7. tar. gz 和 qt-xll-free-3. 3. 7. tar. gz。第二步:編譯 qt-xll-free-3. 3. 7tar zxvf qt-x 11 -free-3.3.7cd qt-xl l-free-3.3.7./configure/user/bin/gmake2交叉編譯編
23、譯 qt-embedded-free-3.3.7tar zxvf qt-embedded-free-3.3.7 cp qt-x 11 -free-3.3.7/bin/uic qt-embedded-free-3.3.7/bincp qt-xl l-free-3.3.7/bin/moc qt-embedded-free-3.3.7/bincd qt-embedded-free-3.3.7./configure -shared -thread -embedded arm -qvfb -freetype-depths4,8,16,24,32 -qt-gif -qt-libpng -qt-libmng
24、 -qt-libjpeg -sqlite -no -qvfb/usr/bin/gmake(6)運(yùn)彳亍 qt-embedded-free-3.3.7/exanipIe/hello/heHo:#cd qt-embedded-free-3.3.7/example/hello./hello-qws如果屏幕顯示hello,就說明移植成功。2程序開發(fā)環(huán)境2.1主程序中創(chuàng)建類在主程序中建一個(gè)mainwindows類,用來顯示開機(jī)界面并接受開機(jī)界面上 的點(diǎn)擊事件。(1)主程序中建一個(gè)setting類,初始化為隱藏,用來配置設(shè)置圖片格式。 當(dāng)顯示開機(jī)界面時(shí)點(diǎn)擊到配置圖標(biāo),該類的對(duì)象顯示,顯示出配置界面。(2)主
25、程序中建一個(gè)play類,初始化為隱藏。顯示開機(jī)界面后,如果點(diǎn)擊 到播放按鈕,開始載入圖片。(3)設(shè)置完畢。2. 2制定程序框架QT簡(jiǎn)單易用,功能強(qiáng)大,用它來實(shí)現(xiàn)該作品的功能,寫在程序上省去了很 多事。它提供對(duì)大多數(shù)目前流行圖片格式的支持,如BMRPNGJPEG等,并且 可以對(duì)圖片進(jìn)行加工。我們可以通過QT編程,實(shí)現(xiàn)圖片的翻轉(zhuǎn),扭曲,縮 放,重疊,以及播放幻燈片的各種切換效果。用觸摸屏實(shí)現(xiàn)輸入操作,進(jìn)行界 面切換。2. 3編輯調(diào)試程序程序用C+編寫,在windows主機(jī)系統(tǒng)下用source insight軟件編輯,通過 文件共享,在虛擬機(jī)linux環(huán)境下編譯,具體步驟如下:(1)在windows
26、主機(jī)和linux虛擬機(jī)的共享目錄下,打開source insight軟 件,建一個(gè)工程,然后在工程里新建圖片查看器文件,這樣,類成員會(huì)自動(dòng)補(bǔ) 齊。(2)編輯完畢,保存。(3)進(jìn)入虛擬機(jī)的圖片查看器工程路徑,執(zhí)行以下命令,進(jìn)行編譯。./bin/qmake-project./bin/qmake make(4)掛載開發(fā)板,調(diào)試(用NFS)o進(jìn)入開發(fā)板終端,執(zhí)行相關(guān)命令,觀 看程序執(zhí)行效果。(5)重復(fù)以上步驟,直至程序調(diào)試滿意,然后把調(diào)試好的程序燒入板子的 S3c2440L芯片中脫機(jī)運(yùn)行。4. 3圖片查看器程序設(shè)計(jì)4. 3.1預(yù)期達(dá)到的界面模型圖4-1預(yù)期成果4. 3. 2源程序items, h#if
27、ndef ITEMS.Hitdefine ITEMS_Httinclude class QGraphicsSceneMouseEvent;class Pixltem : public QGraphicsItem , public QObject public:Pixltem(QPixmap *pixmap);QRectF boundingRect() const;void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);void timerEvent(QTimerEvent *)
28、;void mousePressEvent(QGraphicsSceneMouseEvent *);void mouseReleaseEvent(QGraphicsSceneMouseEvent *);private:QPixmap pix;QTimer *timer;ttendif / ITEMS.Hitems, cppttinclude items. httinclude Pixltem: :Pixltem(QPixmap *pixmap)pix = *pixmap;itinclude ,zmainwidget. hint main(int argc, char * argv)QAppli
29、cation app(argc, argv);MainWidget w;show();return app. exec ();)mainwidget. cppttinclude ,mainwidget. h itinclude ttinclude static const double PI = 3. 14159265358979323846264338327950288419717; MainWidget: :MainWidget (QWidget *parent):QWidget(parent)(angle = 0;scale = 5;shear = 5;translate = 50;QG
30、raphicsScene *scene = new QGraphicsScene;scene-setSceneRect(-200, -200, 400, 400);QPixmap *pixmap = new QPixmap (/zimages/rotate. png,z);item = new Pixltem(pixmap);scene-addltem(item);item-setPos(0, 0);view = new QGraphicsView;view-setScene(scene);view-setMinimumSize(400, 400);ctrlFrame = new QFrame
31、; createControlIFrame(); QHBoxLayout *mainLayout = new QHBoxLayout; mainLayout-setMargin(10);mainLayout-setSpacing(20); mainLayout-addWidget(view); mainLayout-addWidget(ctrlFrame); setLayout(mainLayout);setWindowTitle (tr (,zGraphics Item Transformation7); void MainWidget:createControlIFrame () (/ R
32、otate Control1QGroupBox *rotateGroup = new QGroupBox(tr(Rotate); QSlider *rotateSlider = new QSlider;rotateSlider-setOrientation(Qt:horizontal); rotateSlider-setRange(0, 360);connect(rotateSlider, SIGNAL(valueChanged(int), this, SLOT(slotRotate( int);QHBoxLayout *11 = new QHBoxLayout;H-addWidget (ro
33、tateSlider); rotateGroup-setLayout(11); / Scale Control1 QGroupBox *scaleGroup = new QGroupBox(tr(Scale); QSlider *scaleSlider = new QSlider;scaleSlider-setOrientation(Qt:horizontal); scaleSlider-setRange(1, 10);scaleSlider-setValue(5);connect(scaleSlider, SIGNAL(valueChanged(int), this, SLOT(slotSc
34、ale(in t);QHBoxLayout *12 = new QHBoxLayout;12-addWidget(scaleSlider);scaleGroup-setLayout(12);/ Shear Control1QGroupBox *shearGroup = new QGroupBox (tr (z,Shearz,);QSlider *shearSlider = new QSlider;shearSlider-setOrientation(Qt:Horizontal);shearSlider-setRange(0, 9);shearSlider-setValue(5);connect
35、(shearSlider, SIGNAL(valueChanged(int), this, SLOT(slotShear(in t);QHBoxLayout *13 = new QHBoxLayout;13-addWidget(shearSlider);shearGroup-setLayout(13);/ Tranlate Control1QGroupBox *translateGroup = new QGroupBox(tr(Translate);QSlider *translateSlider = new QSlider;translateSlider-setOrientation(Qt:
36、horizontal);translateSlider-setRange(0, 100);translateSlider-setValue(50);connect(translateSlider, SIGNAL(valueChanged(int), this, SLOT(slotTran slate(int);QHBoxLayout *14 = new QHBoxLayout;14-addWidget(translateSlider);translateGroup-setLayout(14);QVBoxLayout *ctrlLayout = new QVBoxLayout;ctrlLayou
37、t-addWidget(rotateGroup);ctrlLayout-addWidget(scaleGroup);ctrlLayout-addWidget(shearGroup);ctrlLayout-addWidget(translateGroup);ctrlLayout-addStretch();ctrlFrame-setLayout(ctrlLayout);voidMainWidget:slotRotate(int value) ( item-rotate(value-angle); angle = value; void MainWidget:slotScale(int value) ( qreal s;if (valuescale)s = pow(l. 1, (value-scale); elses = pow(l/l. 1, (scale-value);item-scale (s,s); scale = value; void MainWi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廈門房屋租賃合同樣本
- 房地產(chǎn)典當(dāng)合同
- 滬牌租賃合同多
- 石灰石購(gòu)銷合同
- 居間合同協(xié)議書范本
- 酒吧的勞動(dòng)合同
- 火焰探測(cè)器的種類和應(yīng)用
- 基于LabVIEW的鐵路彈條扣壓力測(cè)量系統(tǒng)設(shè)計(jì)
- 無償合同的題
- VTE預(yù)防相關(guān)護(hù)理管理制度
- 學(xué)校中層干部管理培訓(xùn)
- 《航運(yùn)市場(chǎng)營(yíng)銷》課件-海運(yùn)巨頭馬士基
- 繪本創(chuàng)作方案
- 《童年的水墨畫》的說課課件
- 地鐵保潔服務(wù)投標(biāo)方案(技術(shù)標(biāo))
- 2023年河南省新鄉(xiāng)市鳳泉區(qū)事業(yè)單位招聘53人高頻考點(diǎn)題庫(kù)(共500題含答案解析)模擬練習(xí)試卷
- 2023年小升初簡(jiǎn)歷下載
- 廣府文化的奇葩
- 公路工程標(biāo)準(zhǔn)施工招標(biāo)文件(2018年版)解析
- 七年級(jí)地理下冊(cè)期末試卷(人教版)
- 第八節(jié) 元代散曲
評(píng)論
0/150
提交評(píng)論