畫圖板的設計與實現(xiàn)畢業(yè)論文設計_第1頁
畫圖板的設計與實現(xiàn)畢業(yè)論文設計_第2頁
畫圖板的設計與實現(xiàn)畢業(yè)論文設計_第3頁
畫圖板的設計與實現(xiàn)畢業(yè)論文設計_第4頁
畫圖板的設計與實現(xiàn)畢業(yè)論文設計_第5頁
已閱讀5頁,還剩55頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

北京郵電大學畢業(yè)設計(論文)任務書第1頁畢業(yè)設計(論文)題目:畫圖板的設計與實現(xiàn)畢業(yè)設計(論文)要求及原始數(shù)據(jù)(資料):1.深入了解linux下的qtcreator的相關技術;2.熟悉使用qt布局管理器的相關技術;3.熟練掌握qtUI編輯界面的應用,訓練編寫程序的能力;4.深入分析qt中的信號和槽函數(shù)的機制;5.設計并實現(xiàn)qt下的畫圖板的基本功能;6.訓練檢索文獻資料和利用文獻資料的能力;7.訓練撰寫技術文檔與學位論文的能力。第2頁畢業(yè)設計(論文)主要內容:Qt的介紹與具體應用;QT中的信號和槽函數(shù)的機制;畫圖板功能設計;畫圖板界面設計;畫圖板涂鴉功能實現(xiàn);畫圖板繪制基本圖形的實現(xiàn);實現(xiàn)編輯菜單功能;學生應交出的設計文件(論文):1.內容完整、層次清晰、敘述流暢、排版規(guī)范的畢業(yè)設計論文;2.包括畢業(yè)設計論文、源程序等內容在內的畢業(yè)設計電子文檔及其它相關材料。第3頁主要參考文獻(資料):[1]陳英,梁建武.Linux基礎及應用教程.水利水電出版社,2008,29-42[2]倪繼利.Qt以及l(fā)inux操作系統(tǒng)窗口設計.電子工業(yè)出版社,2006,45-152[3]BlakowskiG,SteinmetzR.Amediasynchronizationsurvey:referencemodel,specification,andcasestudies[J].IEEEJournalSelectedAreasinCommunications,1996,14(1):5-35[4]Linux技術及其應用.計算機應用,2000,20(7):5-6[5]Linux應用開發(fā)詳解.機械工業(yè)出版社,2004,53-68[6]林銳,韓永泉.高質量程序設計指南:C++、C語言.電子工業(yè)出版社,2007,124-155[7]JonathanCorbet,AlessandroRubini,GregKoah-Hartman.LinuxDeviceDriver.Jan2005[8]錢能.C++程序設計教程.清華大學出版社,2006,56-88[9]QtEmbedded的嵌入式Linux應用程序的實現(xiàn),計算機應用與軟件,2006,2[10]ISO/IECJTC1/SC29/WG11.IS14496:Genericcodingofmovingpicturesandassociatedaudioinformation(MPEG-4).ISO/IEC,2000:10-15[11]譚浩強.C++面向對象程序設計.清華大學出版社,2006,89-100[12]王子強,劉海燕,李媛州.Linux下圖形用戶界面程序的開發(fā)與實現(xiàn),計算機應用與軟件,2005專業(yè)班級軟件1025班學生南茜要求設計(論文)工作起止日期2014年3月17日~2014年6月27日指導教師簽字日期2014年3月17日教研室主任審查簽字日期系主任批準簽字日期畫圖板的設計與實現(xiàn)摘要本文的主要內容是記述同題課程設計中的一些關鍵技術和輔助文檔。本文的目標是設計一款基于Qt編程語言的簡易畫圖板,使其具有涂鴉,繪制基本圖形等功能。本程序具有一定的實用意義和價值。功能分裝良好可以方便的根據(jù)需求進行擴充。本文運用材料綜述的方法,首先記述了編程環(huán)境的搭建,介紹了Qt的優(yōu)點,Qt編碼規(guī)范和Qt的雙緩沖機制在繪圖中的運用。著重分析了Qt在軟件開發(fā)中的編程機制,并根據(jù)應用特點進行了設計的構件與算法的需求分析。其次在需求分析中給出是可行性分析,然后放入功能分析圖和流程圖幫助梳理設計思路。最后在詳細設計階段完成編碼,實現(xiàn)程序功能,得到一個功能健全的畫圖板應用程序。在本文中將設計并實現(xiàn)畫圖板的一些基本功能,例如:新建,打開,保存,清空,放大,縮小,還原,基本圖形繪制,轉換畫筆顏色等功能。最后運行結果符合設計要求,方案可行。經(jīng)過測試后程序功能實現(xiàn)良好。關鍵詞嵌入式LinuxQT;圖形用戶界面;電子畫板;雙緩沖機制TheRealizationofDrawingBoardFunctionAbstractThemaincontentofthispaperisdescribedwiththecourseinthedesignofsomekeytechnologiesandsupportingdocuments.ThegoalofthisarticleistodesignasimpledrawingboardbasedonQtprogramminglanguage,makeitshavegraffiti,drawupthebasicgraph,andotherfunctions.Thisprogramhasacertainpracticalsignificanceandvalue.Functionaccordingtotherequirementsofgoodpackagingcaneasilyexpanded.

Thisarticleappliesthemethodofmaterialreview,theconstructionofthefirstdescribestheprogrammingenvironment,thispaperintroducestheadvantagesofQtQtcodeconventionsandQtdouble-bufferingmechanismusedinthedrawing.Qtprogramminginthesoftwaredevelopmentmechanismisanalyzedemphatically,andthedesignbasedontheapplicationofartifactsandrequirementsanalysisofthealgorithm.Secondisfeasibilityanalysisisgivenintherequirementsanalysis,andthenintothecombfunctionanalysisdiagramandflowcharttohelpdesignthinking.Programisrealizedbyencodingthedetaileddesignphaseiscomplete,thefunction,getafunctioningdrawingboardapplication.

Designedandimplementedinthispapersomebasicfunctionofdrawingboard,forexample:thenew,open,save,empty,enlarge,shrink,reduction,basicgraphicsrendering,convertthebrushcolor,andotherfunctions.Finallyrunresultsconformtotherequirementsofthedesign,theschemeisfeasible.Programfunctionisgood.KeywordsLinuxQT;graphicaluserinterface(GUI);electronicdrawingboard;doublebufferingmechanism目錄TOC\o"1-3"\t"Abstract,1,標題小三居中,1"\h17488摘要 i20792Abstract ii267921引言 1294541.1研究背景 1451.2研究的目的和意義 2144761.3程序設計的環(huán)境選擇 25562畫圖板設計的技術背景 3223422.1Qt的主要特征 3254652.2QTcreator簡介 3307272.3Qtcreator環(huán)境搭建 4153212.4QT編程機制信號與槽機制簡介 595022.5Qt編碼規(guī)范 7244642.6GDI繪圖理論基礎 9205192.7雙緩沖機制 9221562.8雙緩沖技術繪圖 10212683畫圖板項目需求分析 1296703.1可行性研究 12119053.1.1經(jīng)濟可行性 12176153.1.2技術可行性 1260363.1.3運行可行性 12104083.1.4時間可行性 12148423.1.5法律可行性 12220863.2功能分析 13304083.3系統(tǒng)用例分 13170283.4性能需求 13284743.4.1應用需求分析 14128743.4.2運行需求分析 14252653.4.3其他需求分析 1495154畫圖板概要設計 15249264.1畫圖板功能模塊關系與劃分 15260674.2畫圖板總體設計流程圖 16304535畫圖板詳細設計 17294215.1畫圖板界面設計 1822035.1.1畫圖板的界面元素聲明 18281575.1.2圖板界面布局實現(xiàn) 19166465.2畫圖板功能詳細設計 2069265.2.1畫圖板的文件編輯功能實現(xiàn) 20157445.2.2畫圖板的圖片編輯功能實現(xiàn) 2317215.3畫圖板繪圖功能實現(xiàn) 2648165.3.1繪圖板的基本圖形繪制功能實現(xiàn) 2628085.3.2繪圖板自由繪圖功能實現(xiàn) 3046505.3.3畫圖板畫圖輔助選項實現(xiàn) 33324736畫圖板程序測試 35183456.1測試的重要性及目的 354956.2測試的方法 36258996.3測試用例 36216946.4測試結果 363035結論 388179參考文獻 395776致謝 4015481外文原文 411588中文翻譯 49引言隨著操作系統(tǒng)不斷的更新?lián)Q代,其自帶的畫圖板界面及功能也是不斷變化著,像是xp、vista、win7,它們的畫圖板的界面布局風格以及功能都有所不同。

這表明盡管是簡簡單單的一個操作系統(tǒng)自帶畫圖板,系統(tǒng)設計人員也沒有停止對它的不斷研與探索,他們在不斷尋找著更人性化、更能滿足大眾需求的改變。

隨著社會的不管發(fā)展以及計算機的不斷普及,人們對畫畫的要求越高,對繪圖系統(tǒng)也提出了更高更全面的要求。許多用戶由于自身的畫圖習慣或者是視覺效果不同,對傳統(tǒng)的畫圖工具可能感覺不是特別滿意。就像孩子總是喜歡畫可愛型,而成人則畫實用的。不同年齡不同身份的人,需求不同。綜合上述,為了盡量讓所有人滿意,在此我設計一個大概的程序模型,讓別人來試試我的繪圖系統(tǒng)。對自從上世紀計算機系統(tǒng)向繪畫界的延伸以來,繪圖技術已成為計算機系統(tǒng)不可分割的一部分。而圖形編輯器又是圖形編輯軟件的基礎,幾乎所有的圖形編輯軟件,都是在擁有基本圖形編輯功能的基礎上實現(xiàn)更復雜功能的。故在圖形應用非常廣泛的今天,研究開發(fā)繪圖系統(tǒng)是非常有意義的。在繪圖方面實現(xiàn)繪制直線、矩形、圓形等基本功能,在界面設計方面實現(xiàn)了對圖形的操作,從而從底層對繪圖系統(tǒng)進行簡單的實現(xiàn)。

與此同時,簡單小巧的繪圖記事功能軟件的發(fā)展也在蓬勃向前。本軟件功能與Windows下附件中的畫圖軟件有類似功能。繪制方面的實現(xiàn)功能包括圖片的打開新建保存,畫布的放大縮小,畫筆功能實現(xiàn),基本圖形的繪制,繪圖時可以選擇各種顏色,各種線寬。軟件支持保存和讀取jpg格式的圖形。本軟件運用的是面向對象程序設計的思想。相對于面向過程的設計理念,面向對象的設計方法更適用于畫圖板的設計,它使畫圖板所涉及的各部分功能模塊實現(xiàn)更好的封裝。它的特色是。一方法的唯一性,即方法是對軟件開發(fā)過程全過程進行綜合考慮得到的。二是高度的獨立性,對象是程序的基本元素,它將數(shù)據(jù)和操作緊密地連結在一起,并保護數(shù)據(jù)不會被外界的函數(shù)意外地改變。三是良好的可擴展性,相對獨立的功能模塊使得程序可以根據(jù)需要進行相印的擴充或是縮減。

研究背景計算機繪圖是相對于手工繪圖而言的一種高效率、高質量的繪圖技術。手工繪圖使用三角板、丁字尺、圓規(guī)等簡單工具,是一項細致、復雜和冗長的勞動。不但效率低、質量差,而且周期長,不易于修改。計算機繪圖的發(fā)展更加趨向于用戶需求導向,在一些專業(yè)領域中計算機繪圖發(fā)展迅猛,例如Photoshop、Adobeimage、AutoCAD等。多個程序的匯集,組成功能齊全、能夠繪制基本地圖圖形和各類常用地圖的程序組,稱為繪圖軟件系統(tǒng),或稱為繪圖軟件包。繪圖軟件通常用高級算法語言編寫,以子程序的方式表示,每個子程序具有某種獨立的繪圖功能。繪圖軟件包是繪圖子程序的匯集,可包括幾十個至幾百個子程序。用戶根據(jù)需要,調用其中一部分子程序,繪制某種圖形或一幅地圖。研究的目的和意義日常生活中,有很多方面都會用到畫圖來解決闡述一些問題,這就需要借助計算機來進行簡單的畫圖工作,此時就需要一個能簡單解決這些問題的畫圖軟件。本選題是設計一個簡單的基于Qtcreator的畫圖軟件,能夠完成一些簡單的畫圖需求?,F(xiàn)在比較經(jīng)常使用的是windows系統(tǒng)下附帶的畫圖軟件,它基本上可以滿足一些簡單的畫圖需求。本設計就是按照這個畫圖軟件的思想設計的,使畫圖軟件能達到滿足日常畫圖需求,便于存儲編輯和展示,且要求功耗小且界面人性化,功能易擴展。程序設計的環(huán)境選擇Qt類庫大致可以分為三個部分:控件,框架和工具??丶糠职ōh(huán)境控件、主窗口控件、標準對話框、基本的GUI控件、擴展GUI控件、GUI組織控件以及幫助系統(tǒng)控件??蚣懿糠职ǖ氖且恍┏橄蟮念?,通常不可見,如對象模型、抽象控件、繪圖、拖放、控件外觀。工具部分包括時間日期和鏈表樹等數(shù)據(jù)結構,它們和GUI無關普通工具包括鏈表、堆棧、隊列、樹等常見數(shù)據(jù)結構,如QArray。圖形處理工具控制圖像的編碼/解碼算法。如QIm—agelO。I/O控制工具處理I,0的一些類,如QFile。時間和日期工具類處理時間和日期,如QDate,QTime。在用Qt開發(fā)程序時,對于GUI的設計有兩種方法,一種是通過自己寫代碼來界面進行布局,但這就需要對Ol有一定的熟練程度;另一種是通過QtDesigner來設計界面,只需在ui文件來拖控件來布局就行了。對只需要用Qt進行開發(fā)的程序員來說,后者顯然比前者來的快。以下結合一個實例來介紹用QtDesigner來開發(fā)程序的GUI,主窗口類從QWidget類派生,這樣我們能方便地使用Qt的QMenubar類來添加菜單,并使用Qt的控件類來擺放面板控件,整個程序以事件為驅動,通過Qt的signal—slot機制與終端用戶交互。設計好界面后,在程序編譯后會生成一個ui一.h的頭文件.里面是一個Ui一類,封裝了一些所拖放控件的變量名和一個比較重要的setupUI函數(shù),是一些布局的代碼。要用到這個界面是只需繼承這個類就可以了,或者是包含這個ui~.h的頭文件。設計類的主要思想是把所有的信號和槽放在構造函數(shù)里,程序是以事件為驅動,當產(chǎn)生一個信號時,會去調用相應的函數(shù)。

畫圖板設計的技術背景Qt的主要特征Qt是Trolltech公司的產(chǎn)品,Trolltech是挪威的一家軟件公司,主要開發(fā)兩種產(chǎn)品:一種是跨平臺應用程序界面框架;另外一種就是提供給做嵌入式Linux開發(fā)的應用程序平臺,能夠應用到PDA和各種移動設備,Trolltech公司

://trolltech/。

Qt是一個多平臺的C++圖形用戶界面應用程序框架,它提供給應用程序開發(fā)者建立藝術級的圖形用戶界面所需的所用功能。Qt是完全面向對象,很容易進行擴展,并且允許真正的組件編程。1996年開始,Qt正式進入商業(yè)領域,它成為了全世界范圍內數(shù)千種成功的應用程序的基礎。Qt同時也是流行的Linux桌面環(huán)境KDE

的基礎,注:KDE是所有主要的Linux發(fā)行版的一個標準組件。它具有以下優(yōu)點:1)優(yōu)良的跨平臺特性Qt支持下列操作系統(tǒng):MicrosoftWindows95/98,MicrosoftWindowsNT,Linux,Solaris,SunOS,HP-UX,DigitalUNIX(OSF/1,Tru64),Irix,F(xiàn)reeBSD,BSD/OS,SCO,AIX,OS390,QNX等等。2)面向對象Qt的良好封裝機制使得Qt的模塊化程度非常高,可重用性較好,對于用戶開發(fā)來說是非常方便的。Qt提供了一種稱為信號與槽(signals/slots)的安全類型來替代callback,通過一個對象信號的發(fā)射,另一個槽函數(shù)的響應,使各個對象之間的通信安全而且高效,這使得各個元件之間的協(xié)同工作變得十分簡單。并且QT是直接基于Xlib的,不依賴Motif工具包,所以它的執(zhí)行效率比一般的基于平臺的代碼的執(zhí)行效率要高。3)豐富的APIQt包括多達250個以上的C++類,還提供基于模板的collections、serialization、file、I/Odevice、directorymanagement、date/time類。甚至還包括正則表達式的處理功能。4)支持2D/3D圖形渲染,支持OpenGL5)大量的開發(fā)文檔6)XML支持QTcreator簡介QtCreator是跨平臺的Qt集成開發(fā)環(huán)境,QtCreator是Qt被Nokia收購后推出的一款新的輕量級集成開發(fā)環(huán)境(IDE)。此IDE具有良好的跨平臺運行能力,支持的操作系統(tǒng)包括Linux(32位及64位)、MacOSX以及Windows。QtCreator的設計目標是使開發(fā)人員能夠利用Qt這個應用程序框架更加快速及輕易的完成開發(fā)任務QtCreator可以幫助Qt用戶更加快速便利的運行項目,還可以提高有經(jīng)驗的Qt開發(fā)人員的工作效率,提高代碼的可讀性。其中使用強大的C++代碼編輯器可實現(xiàn)快速編寫代碼。語法標識和代碼完成功能輸入時進行靜態(tài)代碼檢驗以及提示樣式上下文相關的幫助代碼折疊括號匹配和括號選擇模式高級編輯功能。使用瀏覽工具管理源代碼。集成了領先的版本控制軟件,包括Git、Perforce和Subversion開放式文件,無須知曉確切的名稱或位置搜索類和文件跨不同位置或文件沿用符號在頭文件和源文件,或在聲明和定義之間切換。為Qt跨平臺開發(fā)人員的需求而量身定制。集成了特定于Qt的功能,如信號與槽(Signals&Slots)圖示調試器,對Qt類結構可一目了然集成了QtDesigner可視化布局和格式構建器只需單擊一下就可生成和運行Qt項目。Qtcreator環(huán)境搭建下載Qt源碼包到本機,然后解壓縮:

下載qt-x11-free-3.2.1.tar.gz和qt-x11-opensource-src.tar.gz二進制包。

2.在終端切換至qt-x11-free-3.2.1.tar.gz所在目錄下,執(zhí)行:tar

zxvf

-C

/usr/local

到/usr/local目錄

PS:(推薦解壓縮至/usr/local目錄,目錄可以根據(jù)名稱自己創(chuàng)建)

進入用戶主目錄編輯該目錄下的.bash_profile文件,并設置Qt環(huán)境變量,在這里我們以root用戶以例。

#vi

/root/.bash_profile

//打開root用戶.bash_profile文件

在root用戶.bash_profile文件中設置環(huán)境變量,在此文件里面添加如下內容:

QTDIR=/usr/local/qt-x11-free-3.2.1

PATH=$QTDIR/bin:$PATH

MANPATH=$QTDIR/doc/man:$MANPATH

LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

export

QTDIR

PATH

MANPATHLD_LIBRARY_PATH

添加完上面信息后按ESC鍵,“Shife+:”組合鍵回到vi編輯器命令行狀態(tài),輸入wq!(強制保存退出)

添加完環(huán)境變量后,使環(huán)境變量立即生效:#source

/root/.bash_profile

四、進入Qt解壓縮的目錄

#cd

$QTDIR或#cd

QTDIR

。

使用configure工具來構建Qt庫和它提供的工具:./configure(./configure

--help

配置選擇的列表。例:-thread選項來創(chuàng)建這個庫的一個多純種版本。)

最后一步就要進入漫長的Qt安裝編譯時間了,有事的就出去辦事吧,安裝編譯時間大約需要兩個小時。

編譯命令:make

安裝命令:make

install

。首先我們進入Linux的圖形界面,打開一個控制終端(在桌面空間處單擊鼠標右鍵,在彈出的單菜中選擇“新建控制終端”。),在控制終端里面新建一個.cpp文件,并編寫程序,如下:

#vi

#include<qapplication.h>

#include<qlabel.h>

int

main(int

argc,char

*argv[])

{

QApplication

app(argc,argv);

QLabel

*label=new

QLabel("Hello

World!!!",0);

app.setMainWidget(label);

label->show();

return

app.exec();

}

寫完上面的代碼后保存退出(wq)vi編輯器。

#qmake

-project

#qmake

#make

//編譯,生成HelloWorld執(zhí)行文件

圖2-1Qtcreator程序構件截圖QT編程機制信號與槽機制簡介信號/槽機制是QT區(qū)別于其它工具包的最有顯著特征的部分。在GUI編程中,當一個widget改變,我們經(jīng)常希望另外的widget被告知。更普遍地,我們希望任何的對象都可以互相通信。比如,如果用戶點擊close按鈕,我們大多希望調用窗口的close()方法。以前的工具集通過callback來實現(xiàn)這種通信。callback是指向函數(shù)的指針,因此,若果你想讓處理函數(shù)通知你某些事件,你可以傳遞給另一個函數(shù)一個指針來處理函數(shù)。處理函數(shù)在適當?shù)臅r候調用callback。Callbacks有兩種根本的缺陷:第一,它們不是類型安全的,我們無法確定處理程序會調用正確參數(shù)的回調函數(shù)(callback)。第二,回調函數(shù)耦合于處理函數(shù),因為處理函數(shù)必須知道去調用哪個回調函數(shù)。Qt提供了回調的替代技術:信號和槽。當特定事件發(fā)生時引發(fā)相應的信號。Qt的widget有許多預定義的信號,同時我們也可以為widget子類添加我們自定義的信號。槽是回應特定的信號時所調用的方法。Qt的窗口部件有許多預定義的槽,但是我們也可以為窗口部件的子類田間我們自定義的槽,以處理我們所感興趣的信號。信號槽機制是類型安全的:信號的簽名必須跟接受的槽的簽名相匹配(事實上,槽的簽名可以比信號的簽名短,因為它可以忽略額外的字段)。因為簽名是相容的,編譯器就可以幫我們檢測類型的不匹配。信號和槽是松耦合的:一個類產(chǎn)生一個信號,并不知道而且不關心那個槽接受該信號。Qt的信號槽機制保證,如果你連接了一對信號槽,槽會在適當?shù)臅r間帶著信號的參數(shù)被調用。信號和槽可以附帶任何類型任何數(shù)量的參數(shù)。信號和槽是完全類型安全的。槽可以用來接受信號,不過槽也是普通的成員函數(shù)。類似于對象不知道誰接受它的信號,槽也不知道是否有信號連接自己。這保證了Qt可以創(chuàng)建完全獨立的組件。一個信號可以連接無數(shù)的槽,并且一個槽可以連接你想要連接的信號。甚至可以直接連接兩個信號(當?shù)谝粋€信號產(chǎn)生,立即產(chǎn)生第二個信號)。信號和槽一起形成了一種強大的組件編程機制。QT的信號和槽的機制可以保證如果你把一個信號和一個槽連接起來,槽會在正確的時間使用信號的參數(shù)而被調用。信號和槽可以使用任何數(shù)量、任何類型的參數(shù)。它們是完全類型安全的:不會再有回調核心轉儲(coredump)。可以把許多信號和你所希望的單一槽相連,并且一個信號也可以和所期望的許多槽相連。把一個信號和另一個信號直接相連也是可以的??傮w來看,信號和槽構成了一個強有力的組件編程機制。如果一個類要使用信號與槽機制,它就必須是從QObject或QObject的子類繼承,而且類的定義必須加上Q_OBJECT宏。signals、slots和emit是QT特有的關鍵字,分別用來表示信號、槽、和發(fā)送信號,移除這些關鍵字和預處理程序,就可以使用“標準的C++編譯器”[6][7][8]。槽同其他函數(shù)一樣也具有訪問權限,只是槽的訪問權限決定了誰可以和它相連,如一個publicslots:包含了任何信號都可以相連的槽。一個protectedslots:包含了只有這個類和它的子類的信號才能連接的槽。這就是說這些槽只是類的實現(xiàn)的一部分,而不是它和外界的接口。一個privateslots:包含了只有這個類本身的信號可以連接的槽,甚至它的子類都沒有獲得連接的權利。圖2-2信號與槽機制示意圖

Qt編碼規(guī)范第一條:盡量不要直接引用QT示例(或其它符合GPL協(xié)議的程序源代碼)中源代碼如果引用了Qt示例程序,請試圖在內部使用不同的代碼行來組織它。如果直接使用了Qt的源代碼文件,請保留位于文件首部的版權聲明。如果您使用了別人編寫的源代碼,則需要取得相關的使用許可文書。但是如果你從建議中獲得的僅僅是一些想法,而不是你實際上使用的代碼,你也不需要文書。盡量不要對Qt的源代碼進行修改,如果為了某重要需求而一定要對Qt源代碼進行修改,那么一定要在源代碼中修改的位置做詳細的說明,并署名。另外還要書寫詳細的修改文檔。第二條:工程文件命名遵循的原則工程文件(.pro)命名采用:工程名+.pro的方式.ptro文件中HEARDERS和SOURCE行中如果有多個文件名(一般都會有的),則使用“\”將他們隔開,并且使每一個文件名單獨占一行。原則上文件名的先后順序沒有限制,但是一般的慣例是將依賴性最小的文件寫在最前面,工程的主程序(一般是main.cpp)往往出現(xiàn)在source的最后。一般將TARGET行寫在HEARDERS和SOURCE的下面。下面是范例:SOURCE=HELLO.CPPmain.cppTARGET=hello工程中所有文件和目錄命名中的字母一律使用小寫,以保持在windows環(huán)境下的兼容性。第三條:函數(shù)注釋三部分,功能、參數(shù)和返回值每個程序都應該以一段簡短地、說明其功能的注釋開頭。請為每個函數(shù)書寫注釋以說明函數(shù)做了些什么。如果有參數(shù)和返回值,也需要對其進行解釋。第四條:變量、定義等注釋對于每個靜態(tài)變量和全局變量,請?zhí)砑酉鄳淖⑨屨Z句。對于重要的變量、定義等進行注釋。第五條:變量和函數(shù)的命名原則變量名或函數(shù)名中使用大寫字符來區(qū)分各個部分,以便于記憶和閱讀。全局(包括類中的)變量用長名字,局部變量用短名字。類成員變量前應加上m_,全局變量加上g_,僅與本模塊有關的變量加上l_。如果定義Qt類庫中某種類型的變量,采用將類名中大寫字母提取出并合并成小寫的縮寫字符串的方法(去掉第一個Q),如:QLineEdit*m_leInputNum;QString*m_sName;如果程序中出現(xiàn)了兩個類名縮寫一樣的問題,如:QToolBar和QToolButton的縮寫都是tb,這時應將其中一個類的縮寫進行變動,變動的準則以能夠避免沖突,同時縮寫能夠表達類名為準。如這里可以將QToolBar的縮寫為tbar,QToolButton仍用tb,這樣就可以避免命名沖突。聲明自定義對象類型的變量采用同樣的方法。局部變量應盡量易懂簡潔,使用常見的變量,如Num,nCount,i,j,k,n,len,pos,offset,nReadNum,index,nRet,ret,string,filename臨時變量,如ltmp,ftmp,tmpStr,tempStr自定義信號以sig_開頭,自定義槽以slt_開頭。Sig_和slt_后面第一個單詞(或其縮寫)要以小寫字母開頭,第二個以后的單詞(或縮寫)要以大寫字母開頭。如:sig_mouseClicked(),slt_getMouseEvent()。另外,信號和槽的參數(shù)必須完全對應。在用connect進行連接的時候,信號和槽中的參數(shù)可以只寫參數(shù)類型。基本結構是數(shù)個以大寫字母開頭的單詞。返回自定義private變量值的函數(shù)命名建議以get開頭,如getLength()可以表示取回成員變量m_nlength()等;設置自定義private變量的函數(shù)命名建議以set開頭,如SetLength()可以表示設置成員變量m_nlength()等。這樣做是為了避免與Qt類中的函數(shù)名發(fā)生沖突。全局函數(shù)命名請以小寫g開頭。第六條:自定義類的命名原則自定義類一般有兩個文件,一個頭文件,一個實現(xiàn)體cpp。文件名采用被封裝的類名,但是一律小寫。如果一些結構或宏僅與本類有關,可在類頭文件中定義。任何自定義類命名不要以Q開頭,以免與Qt類庫中的類混淆。(對自定義的類命名建議以大寫字母A開頭(MMCP),表達一定版權信息,并且在文件列表時自定義類會依次排在列表的前部)。如果需要自定義一個基類,請確保該基類的類名以base結束。工程的界面類一般從Qwigdet\QMainWindow\QDialog類繼承,工程主界面類的命名采用“工程名+MainWindow”方式,如:AChartMainWindow即表示Chart工程的主界面類。主界面類往往在程序的開頭(main函數(shù))處構造,建議將構造主界面類的語句(main函數(shù))放在main.cpp中。對于一般的窗體,請在類名的最后體現(xiàn)窗體的類型,一般的方法是如果從Qwidget繼承而來,則以Widget結尾,如果從QMainWindow繼承而來則以Window結尾,從QDialog繼承而來,則以Dialog結尾。如果在自定義類中(從Qt某個類繼承),如果覆蓋了父類中某個函數(shù),請在該函數(shù)的聲明旁邊注明。第七條:類聲明體中的編排在類的聲明體中,請按照:Q_OBJECT、public:signals:、slots:、protected:private:,的順序將成員變量和函數(shù)進行排列。如果需要在這個類(class)中聲明某種數(shù)據(jù)類型(結構、枚舉等),請將這個聲明放在所有成員變量和成員函數(shù)的前面。如果在一種類型的聲明中,即有成員變量,又有函數(shù)聲明,請使用兩個相同的類型聲明將它們隔開,如:Private:Voidfunction();……Private:Intm_number;……對一般的界面類,如果使用了信號/槽,則class聲明的第一行必須是Q_Object建議避免使用protected類型的成員函數(shù)或者成員變量,因為在Qt中,大量的事件處理函數(shù)(槽)均是以protected類型出現(xiàn)的。第九條:工程中目錄的使用工程中的圖片(建議以JPEG.PNG格式(避免使用gif)),統(tǒng)一保存在“./pics”目錄中。工程使用的漢化相關文件(.po和.qm)放在“./i18/”目錄中。工程的臨時交換目錄請以宏的形式定義(建議使用“./temp/”),不要使用固定目錄。另外,請不要使用“./temp/”目錄名(這個目錄名在Qtforwindows的版本中有特殊意義)。第九條:界面布局原則制作Qt界面的時候,請盡量使用布局管理器(QLayout)進行布局管理,避免使用絕對坐標,除非你能夠絕對肯定這個界面的尺寸是完全不會變換的。如果某個區(qū)域出現(xiàn)了很多控件,在保證不會影響程序控制結構的前提下,請將這些控件放在一個可以包含其它窗口控件的盒子(如QWidget,QFrame,QGroupBox)中,然后再讓這個盒子出現(xiàn)在界面上(即這些控件以整體形式出現(xiàn))。書寫界面上的英文長度的時候,請與對應的中文進行比較,確保漢化后中文能夠被完全顯示。代碼中如果出現(xiàn)了需要在界面上出現(xiàn)的文字,必須用英文表示,并且使用tr函數(shù)將其包含。如:tr(“message!”)不能在程序中將這些文字直接用中文替換。GDI繪圖理論基礎任何圖形程序的輸出,都離不開圖形設備接口GDI(Graphic

Device

Interface),它是管理Windows應用程序在窗口內的繪圖操作和與此相關的許多其它信息。如圖形設備(打印機、顯示器)的信息、繪圖的坐標系統(tǒng)和映射模式、繪圖工具的當前狀態(tài)(什么樣的畫筆、畫刷、文本的前景色與背景色、文本所使用的字體)[7]。

Windows的GDI繪制的各種圖形(點、線、圓、多邊形、矩形等)是與設備無關的,即在屏幕的窗口內繪圖與在打印機上繪圖是相似的。

GDI是一個可執(zhí)行程序,它接收Windows應用程序的繪圖請求(表現(xiàn)為GDI調用),并將它們傳送給相應的設備驅動程序,再由設備驅動程序驅動相應的硬件設備,如打印機或顯示器輸出。

應用程序使用GDI可以對三種類型的圖形進行操作:文本操作、矢量圖形操作和光柵圖形操作(圖像操作)。

(1)文本操作是以邏輯坐標為單位來計算文本的輸出位置,用戶可以通過各種GDI函數(shù)來作出具有各種效果的文本。

(2)矢量圖形指的是利用畫點、直線、曲線(折線、貝塞爾曲線等)、多邊形、扇形、矩形等函數(shù)所繪制的圖形。

(3)光柵圖形操作是指以光柵圖形函數(shù)對以位圖形式存儲的數(shù)據(jù)進行操作,它包括各種位圖和圖標的輸出,其在屏幕上表現(xiàn)為對若干個行和列的像素操作。光柵圖形操作是直接從內存到顯存的拷貝操作,其缺點是需要額外的內存空間,優(yōu)點是操作速度快。雙緩沖機制所謂“雙緩沖區(qū)”,故名思義就是要有倆緩沖區(qū)(簡稱A和B)。這倆緩沖區(qū),總是一個用于生產(chǎn)者進行輸入緩存,另一個用于消費者進行輸出讀取。當倆緩沖區(qū)都操作完,再進行一次交替切換(先前被生產(chǎn)者寫入的轉為消費者讀出,先前消費者讀取的轉為生產(chǎn)者寫入)。以此實現(xiàn)生產(chǎn)者和消費者不會同時操作在同一個緩沖區(qū),就避免了發(fā)生沖突,因此也不需要在讀寫每一個數(shù)據(jù)單元時都進行同步/互斥操作。雙緩沖展現(xiàn)了空間換時間的優(yōu)化思路。為了解決雙緩沖問題,我們需要定義兩個互斥鎖(簡稱La和Lb),分別對應倆緩沖區(qū)。生產(chǎn)者或消費者如果要操作某個緩沖區(qū),必須先擁有對應的互斥鎖。Qt的雙緩沖技術(doublebuffering)是Qt繪畫機制的一部分,是一種在Qt4中被全面采用的技術。其核心是:把一個窗口部件渲染到一個脫屏pixmap(off-screenpixmap)中,然后再把這個pixmap復制到顯示屏幕上。這樣做的目的是用于消除屏幕的閃爍并且因而界面會顯得更漂亮。Qt4中,Qt會自動處理這些情況,所以在普通的繪畫中,我們不必要關注這些內容。在更詳細的說明這一技術前,簡單介紹一下Qt的繪畫機制。Qt的繪畫機制本質上是提供了2個工具:QPainter和QPaintDevice,分別代表人類世界的畫筆和畫板。Gemfield要完成一次繪畫,就必須有個畫筆(QPainter),另外,還得解決畫筆畫在哪兒(畫板,QPaintDevice)的問題。Qt中的畫板是QPaintDevice,當然,gemfield用到的都是它的子類,也就是具體哪種畫板:它們是:QWidget、QImage、QPicture、QPixmap等,也就是每一個可見的控件(QWidget的子類)都是畫板(在其paintEvent()里繪畫)。雙緩沖技術繪圖當要繪制屏幕時,我們只要調用paint函數(shù)即可。其中我們可以使用繪圖方法來繪制任何文字圖形圖像??墒钱斘覀兝L制的東西多了之后,你就會發(fā)現(xiàn)又是屏幕上的顯示根本不是我們要的結果,很雜亂。我們知道,如果窗體在響應繪圖消息的時候要進行復雜的圖形處理,那么窗體在重繪時由于過頻的刷新而引起閃爍現(xiàn)象。解決這一問題的有效方法就是雙緩沖技術。因為窗體在刷新時,總要有一個擦除原本圖象的過程,此時程序會利用背景色填充窗體繪圖區(qū),然后再調用新的繪圖代碼進行重繪,這樣一擦一寫造成了圖象顏色的反差。當WM_PAINT的響應很頻繁的時候,這種反差也就越發(fā)明顯。于是我們就看到了閃爍現(xiàn)象。因此,雙緩沖區(qū)就提供了一個完美的解決方案。我們可以在緩沖區(qū)2中繪制圖像,而是用緩沖區(qū)1來輸出到屏幕。這樣我們就可以控制繪制和現(xiàn)實的過程,從而避免上面的現(xiàn)象。雙緩沖即在內存中創(chuàng)建一個與屏幕繪圖區(qū)域一致的對象,先將圖形繪制到內存中的這個對象上,再一次性將這個對象上的圖形拷貝到屏幕上,這樣能大大加快繪圖的速度。雙緩沖實現(xiàn)過程如下:(1)在內存中創(chuàng)建與畫布一致的緩沖區(qū)(2)在緩沖區(qū)畫圖(3)將緩沖區(qū)位圖拷貝到當前畫布上(4)釋放內存緩沖區(qū)其實,在這樣一個簡單的繪圖工作中,這樣的技術大可不必。而且隨著半導體技術的進步,雙緩沖所能發(fā)揮出的功能相對減少。另外一個不容忽視的問題是,使用雙緩沖技術會增加系統(tǒng)的負載。因為相比普通的繪制,它多出了一些工作。比如在SYSZUXpad上運行GemfieldFuwaArrow程序時,雙緩沖時cpu的利用率是50%,而沒有采用雙緩沖時,cpu的利用率是37%。雙緩沖和直接繪制的區(qū)別示意圖如下:圖2-1雙緩沖繪圖原理圖

畫圖板項目需求分析可行性研究該階段通過對系統(tǒng)目標的初步調研和分析,提出可行性方案并進行論證。我們在這里主要從技術可行性、經(jīng)濟可行性和操作可行性等方面進行分析。經(jīng)濟可行性開發(fā)該系統(tǒng)所需的相關資料可以通過對現(xiàn)已存在的相關系統(tǒng)進行調查采集,所需的應用軟件、硬件系統(tǒng)也易于獲得,因此開發(fā)成本較低。而引進使用本系統(tǒng)后,與傳統(tǒng)方式相比,具有高效率、低成本、高質量的特點,可以節(jié)省不少人力、物力及財力。所以,從經(jīng)濟的角度來看,該系統(tǒng)可行。技術可行性技術可行性要考慮現(xiàn)有的技術條件是否能夠順利完成開發(fā)工作,軟硬件配置是否能夠滿足開發(fā)需求等等。本系統(tǒng)使用JSP開發(fā)語言,調試相對簡單,當前的計算機硬件配置也完全能夠滿足開發(fā)的需求,因此在技術上是絕對可行的。軟件方面,由于目前單機模式相對發(fā)展成熟,故軟件的開發(fā)平臺成熟可行,它們速度快、容量大、可靠性能高、價格低,完全能滿足系統(tǒng)的需求。本系統(tǒng)的開發(fā),是典型的面向對象系統(tǒng),采用Qt編程語言,已無技術上的問題。運行可行性運行可行性是對組織結構的影響、現(xiàn)有人員、機構和環(huán)境對系統(tǒng)的適應性以及人員培訓補充計劃的可行性。當前信息化技術已經(jīng)相當普及,各類操作人員水平都有相當?shù)母叨?,所以在運行上是可行的。時間可行性從時間上看,在兩個月的時間里補充相關知識并完成系統(tǒng)的開發(fā),雖然有些緊張,但卻并非不可實現(xiàn)。通過這兩個多月的不懈努力,系統(tǒng)功能已基本實現(xiàn)。法律可行性1所有技術資料都為合法。2開發(fā)過程中不存在知識產(chǎn)權問題。3未抄襲任何系統(tǒng),不存在侵犯版權問題。4開發(fā)過程中未涉及任何法律責任。綜上所述,本系統(tǒng)的開發(fā)從技術上、經(jīng)濟上、法律上都是完全可靠的。需求分析是一個軟件的基礎。如果沒有正確的需求分析就不能做出滿意的軟件。所以可以說,需求分析是一個軟件設計的靈魂。所以在任何系統(tǒng)開發(fā)之前,都用該進行相應的需求分析。需求分析的精準度越高,開發(fā)出來的程序穩(wěn)靠行就越高,所需費用就會降低。反之,做出來的程序安全系數(shù)不高,還會增加開發(fā)費用,造成人力物力資源的嚴重浪費。功能分析我作的是Qtcreator下的畫圖板。在設計時需要考慮用戶的需求和畫圖的習慣。例如習慣上的工具面板應該是豎排放置,而編輯菜單應該放置在橫排。在進行具體的軟件實際設計之前,應先對使用過程中用戶可能需要并在本程序中應當實現(xiàn)的功能等進行整理,并列一個簡要的提綱,如下:(1)畫板新建功能:新建初始畫板。(2)畫板保存、另存為功能:在對畫板進行編輯之后,可以選擇保存或者另存為。(3)畫板的打開功能:可以打開原來編輯并保存過的畫板。(4)畫板放大功能:圖片可逐級放大尺寸。(5)畫板縮小功能:圖片可逐級縮小尺寸。(6)畫板還原功能:畫板通過不同尺寸的放大和縮小后,能夠還原到初始新建的尺寸大小。(7)畫板清空功能:畫板可以在當前任何狀態(tài)下進行對當前狀態(tài)的清空,回到初始新建畫板狀態(tài)。(8)畫板畫圖工具功能:畫板可以實現(xiàn)選擇圖形、畫筆線寬、畫筆顏色等功能。(9)畫板的圖形選擇功能:畫直線、圓形、矩形、圓角矩形。(10)圖片打開、編輯、保存功能:可以打開一些格式的圖片,如png、bmp等,并且可以作為畫板背景,在其做編輯并且保存Diagram。Diagram系統(tǒng)用例分打開保存打開保存新建清屏文件操作界面操作縮放用戶自由繪圖繪制基本圖形顏色選擇繪圖線寬選擇圖3-1功能分析用例圖

性能需求圖3-1功能分析用例圖為了保證系統(tǒng)能夠長期、穩(wěn)定、安全、可靠、高效地運行,系統(tǒng)處理的準確性和及時性是系統(tǒng)的必要性能。作為系統(tǒng)中很多數(shù)據(jù)的來源,本系統(tǒng)的添加功能對于整個系統(tǒng)的功能及性能舉足輕重,其準確性和及時性很大程度上決定了系統(tǒng)的成敗,因此在開發(fā)過程中,必須采用一定的方法保證系統(tǒng)的準確性和及時性。應用需求分析系統(tǒng)的性能要求通常是對系統(tǒng)需要的存儲容量以及后援存儲、重新啟動和安全性、運行效率等方面的考慮。軟件方面:通過虛擬機軟件,你可以在一臺物理計算機上模擬出另一臺或多臺虛擬的計算機,這些虛擬機完全就像真正的計算機那樣進行工作,例如你可以安裝操作系統(tǒng)、安裝應用程序、訪問網(wǎng)絡資源等等。對于你而言,它只是運行在你物理計算機上的一個應用程序,但是對于在虛擬機中運行的應用程序而言,它就是一臺真正計算機。因此,當你在虛擬機中進行軟件評測時,可能系統(tǒng)一樣會899.htm"崩潰;但是,崩潰的只是虛擬機上的操作系統(tǒng),而不是物理計算機上的操作系統(tǒng),并且,使用虛擬機的“Undo”[1](恢復)功能,你可以馬上恢復虛擬機到安裝軟件之前的狀態(tài)。虛擬系統(tǒng)通過生成現(xiàn)有操作系統(tǒng)的全新虛擬鏡像,它具有真實windows系統(tǒng)完全一樣的功能,進入虛擬系統(tǒng)后,所有操作都是在這個全新的獨立的虛擬系統(tǒng)里面進行,可以獨立安裝運行軟件,保存數(shù)據(jù),擁有自己的獨立桌面,不會對真正的系統(tǒng)產(chǎn)生任何影響,而且具有能夠在現(xiàn)有系統(tǒng)與虛擬鏡像之間靈活切換的一類操作系統(tǒng)。虛擬系統(tǒng)和傳統(tǒng)的虛擬機(Vmware,VirtualBox,Virtualpc)不同在于:虛擬系統(tǒng)不會降低電腦的性能,啟動虛擬系統(tǒng)不需要像啟動1.htm"windows系統(tǒng)那樣耗費時間,運行程序更加方便快捷;虛擬系統(tǒng)只能模擬和現(xiàn)有操作系統(tǒng)相同的環(huán)境,而虛擬機則可以模擬出其他種類的操作系統(tǒng);而且虛擬機需要模擬底層的硬件指令,所以在應用程序運行速度上比虛擬系統(tǒng)慢得多。流行的虛擬機軟件有VMware(VMWareACE)、VirtualBox和VirtualPC,它們都能在Windows系統(tǒng)上虛擬出多個計算機。運行需求分析硬件條件:酷睿2CPU、1GRAM、10G以上硬盤的PC機。軟件條件:裝載ubantu虛擬機,Qtcreator。其他需求分析本系統(tǒng)具有較好的可維護性、可靠性、可理解性以及運行效率,易于用戶理解和操作。可維護性包括了可讀性、可修改性、可測試性等含義;可靠性則通常包括正確性和健壯性。在系統(tǒng)開發(fā)過程中,要于各種矛盾的目標之間作權衡,并要在一定的限制條件下(經(jīng)費、時間、可用的軟、硬件資源等),使上述各方面的需求得到最大限度的滿足。

畫圖板概要設計畫圖板功能模塊關系與劃分功能模塊是指數(shù)據(jù)說明、可執(zhí)行語句等程序元素的集合,它是指單獨命名的可通過名字來訪問的過程、函數(shù)、子程序或宏調用。功能模塊化是將程序劃分成若干個功能模塊,每個功能模塊完成一個子功能,再把這些功能模塊總合起來組成一個整體,以滿足所要求的整個系統(tǒng)的功能。功能模塊化的根據(jù)是,如果一個問題有多個問題組合而成,那么這個組合問題的復雜程度將大于分別考慮這個問題時的復雜程度之和。這個結論使得人們樂于利用功能模塊化方法將復雜的問題分解成許多容易解決的局部問題。功能模塊化方法并不等于無限制地分割軟件,因為隨著功能模塊的增多,雖然開發(fā)單個功能模塊的工作量減少了,但是設計功能模塊間接口所需的工作量也將增加。本畫圖板的功能模塊劃分如圖所示:編輯功能簡易畫圖板畫圖功能圖編輯文件編輯新建打開保存縮放清空線性非線自由繪圖基本圖形輔助選項顏色線寬鉛筆刷子圖4-1畫圖板功能模塊圖其中需要擴說明的部分有:在基本圖形的繪制中有線性繪圖和非線性繪圖兩個部分,此處在設計時我的想法是使用不同的事件響應機制來完成設計。即在繪制直線時使用mousePressEvent()和mouseReleaseEvent()。獲得lastPoint和tempPoint兩個首尾點,然后調用程序自帶的drawLine()函數(shù)來完成繪制。而在繪制非線性圖形時,此處實現(xiàn)的基本圖形有:橢圓形,矩形,圓角矩形。此處使用mousePressEvent()和mouseMoveEvent()來完成繪制。

畫圖板總體設計流程圖流程程序圖是程序分析中最基本、最重要的分析技術,它是進行流程程序分析過程中最基本的工具。它運用工序圖示符號對生產(chǎn)現(xiàn)場的整個制造過程做詳細的記錄,以便對零部件、w/1214.htm"產(chǎn)品在整個制造過程中的生產(chǎn)、加工、檢驗、儲存等環(huán)節(jié)待作詳細的研究與分析,特別適用于分析生產(chǎn)過程中的成本浪費,提高經(jīng)濟效益。本軟件作為一個高度的面向對象的程序,其流程圖相對簡便,可以簡化的概述為從畫圖板打開,畫圖或圖片編輯,到關閉的整個過程。畫圖板文件操作整個過程如下圖所示:開始開始結束退出程序NY新建一個畫圖板保存編輯好的圖片文件是否保存YN是否打開已有圖片繪制和修改圖形新建或默認文件圖4-2畫圖板文件操作程序流程圖打開并讀入已有圖片初始化繪圖區(qū)域結束退出程序NY新建一個畫圖板保存編輯好的圖片文件是否保存YN是否打開已有圖片繪制和修改圖形新建或默認文件圖4-2畫圖板文件操作程序流程圖打開并讀入已有圖片初始化繪圖區(qū)域鼠標左鍵彈起,響應函數(shù)mouseReleaseEvent()得到圖形鼠標左鍵按下并移動,響應函數(shù)mouseMoveEvent()繪制圖形鼠標左鍵按下,響應函數(shù)mousePressEvent()開始記錄坐標點位置結束drawLine()drawElipse()矩形直線drawRect()橢圓默認值(w=1)選擇線色選擇線寬默認值(黑色)改變畫筆屬性定義并初始化shape參數(shù)記錄形狀color參數(shù)記錄顏色width參數(shù)記錄線寬開始改變畫筆屬性圖4-3畫圖板畫圖功能流程圖

畫圖板詳細設計鼠標左鍵彈起,響應函數(shù)mouseReleaseEvent()得到圖形鼠標左鍵按下并移動,響應函數(shù)mouseMoveEvent()繪制圖形鼠標左鍵按下,響應函數(shù)mousePressEvent()開始記錄坐標點位置結束drawLine()drawElipse()矩形直線drawRect()橢圓默認值(w=1)選擇線色選擇線寬默認值(黑色)改變畫筆屬性定義并初始化shape參數(shù)記錄形狀color參數(shù)記錄顏色width參數(shù)記錄線寬開始改變畫筆屬性圖4-3畫圖板畫圖功能流程圖畫圖板界面設計畫圖板的界面元素聲明在畫圖板的界面設計中我沒有使用QtDesigner等UI界面開發(fā)工具,而是選用的直接在Qtcreator中定義并實現(xiàn)了一個window類,它是繼承于Qwidget的一個子類。在window類中我們首先使其繼承于QMainWindow類,同時在類的定義中加入Q_Object宏。在window.h頭文件中加入如下定義代碼:classWindow:publicQMainWindow{Q_OBJECTpublic:Window(QWidget*parent=0);//window類的構造函數(shù)和析構函數(shù)~Window();voidcreateCommandToolBar();//聲明命令工具欄,畫圖工具欄,和菜單欄voidcreatePaintToolBar();voidcreateMenus();其次我們在window.h中聲明以下內容:界面布局聲明的私有類型按鈕對象聲明的響應槽函數(shù)菜單欄按鈕QToolBar*CommandToolBar;*newBtnnewSlot()*openBtnopenSlot()*saveBtnsaveSlot()*saveASBtnsaveAsSlot()*largeBtn;largeSlot()*smallBtnsmallSlot()*clearBtnclearSlot()定義在paint類*normalBtnnormalSlot()工具欄按鈕QToolBar*PaintToolBar;*lineBtnlineSlot()*rectangleBtnrectSlot()*roundRectBtroundRectSlot()*ellipseBtnellipseSlot()*penBtnpenSlot()*brushBtnbrushSlot()*rubberBtnRubberSlot()*colorBtncolorSlot()*spinBoxspinBoxValueChanged(int)其次在聲明中還應當注意的是:QSpinBoxspinBoxValueChanged(int)//在線寬的選擇上采取spinBox來方便而精確的記錄當前線寬,而不是用信號和槽機制進行響應QAction*saveAsAction;QAction*exitAction;//此處聲明了兩個動作PaintArea*paint;QScrollArea*scrollArea;//此處聲明了兩個自定義類的接口QStringfileName;//使用fileName來保存文件名以上我們完成了在window.h中的對于所有的對象和槽的聲明。圖板界面布局實現(xiàn)在聲明過后,我們在對應的window.cpp中完成所有界面布局的定義:QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));//使用UTF-8字符集對文本編碼進行轉換:this->setWindowTitle(tr("畫圖"));//窗體標題this->setFont(QFont("Times",14));//設置程序字體this->resize(1024,576);//舒適的大小this->paint=newPaintArea;繪圖區(qū)的初始化:scrollArea=newQScrollArea;//新建一個scrollArea控件scrollArea->setBackgroundRole(QPalette::Dark);//設置背景色為灰色scrollArea->setWidget(paint);//將繪圖區(qū)放在scrollArea控件中scrollArea->widget()->setMinimumSize(3500,2600);//scrollArea初始化大小為3500*2600this->setCentralWidget(scrollArea);//scrollArea控件添加到主窗口接下來完成所有按鈕的定美化和布局,此處不列舉所有功能代碼,我們以“新建”繪圖按鈕為例:第一步:newBtn=newQPushButton(tr("新建"));//新建按鈕newBtn->setFont(QFont("Times",14));//設置字體newBtn->setIcon(QIcon(":/image/new.png"));//為按鈕設置圖標素材newBtn->setIconSize(QSize(25,25));//更改按鈕圖標的大小newBtn->setFlat(true);//設置圖標的立體效果狀態(tài)第二步:voidWindow::createCommandToolBar(){this->CommandToolBar=newQToolBar;//新建命令工具欄CommandToolBar->addWidget(newBtn);//將新建按鈕添加進工具欄第三步:connect(newBtn,SIGNAL(clicked()),this,SLOT(newSlot()));//按鈕點擊觸發(fā)事件對于newBtn和newSlot()建立連接,應用信號和槽機制的關鍵步驟最終完成界面的設計如下圖所示:圖5-1畫圖板界面展示此處我使用了許多自己在網(wǎng)上尋找的素材圖片來對于整個界面進行美化:圖5-2圖標素材展示畫圖板功能詳細設計在畫圖板的界面布局安排好以后,我們開始設計完成畫圖板的基本功能,根據(jù)我們所畫的功能模塊圖的分布思想來完成以下代碼編輯:畫圖板的文件編輯功能實現(xiàn)首先介紹畫圖板的新建功能實現(xiàn):畫圖板的新建功能實現(xiàn)定義在newSlot槽函數(shù)中:voidWindow::newSlot(){Window*m=newWindow;//新建功能是通過重新new一個MyWindow對象來實現(xiàn)的。m->show();//新建的對象調用show()函數(shù)來顯示出來,}實現(xiàn)效果如圖所示:圖5-3新建功能實現(xiàn)截圖在中定義“打開”槽函數(shù)voidWindow::openSlot(){this->fileName=QFileDialog::getOpenFileName(this,tr("南茜"));paint->openImage(fileName);在paint.cpp中實現(xiàn)打開功能:/*打開圖片文件*/boolPaintArea::openImage(constQString&filename){QImageloadImage;if(!loadImage.load(filename))第二部分介紹畫圖板的打開功能實現(xiàn):returnfalse;QSizenewsize=loadImage.size();//獲得圖片的尺寸setImageSize(newsize.width(),newsize.height());//根據(jù)加載圖片的尺寸,通過調用setImageSize()函數(shù)重新設置Image的尺寸Image=loadImage;//把QImage對象loadImage加載的圖像放到已經(jīng)設置好的Image上update();//主動調用update()函數(shù),觸發(fā)paintEvent()事件,進行界面重繪returntrue;}圖5-4打開功能實現(xiàn)截圖第三部分介紹畫圖板的保存功能實現(xiàn):畫圖板的保存功能槽函數(shù):voidWindow::sa

溫馨提示

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

最新文檔

評論

0/150

提交評論