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

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

北京郵電大學(xué)畢業(yè)設(shè)計(jì)(論文)任務(wù)書(shū)第1頁(yè)畢業(yè)設(shè)計(jì)(論文)題目:畫(huà)圖板的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)(論文)要求及原始數(shù)據(jù)(資料):1.深入了解linux下的qtcreator的相關(guān)技術(shù);2.熟悉使用qt布局管理器的相關(guān)技術(shù);3.熟練掌握qtUI編輯界面的應(yīng)用,訓(xùn)練編寫程序的能力;4.深入分析qt中的信號(hào)和槽函數(shù)的機(jī)制;5.設(shè)計(jì)并實(shí)現(xiàn)qt下的畫(huà)圖板的基本功能;6.訓(xùn)練檢索文獻(xiàn)資料和利用文獻(xiàn)資料的能力;7.訓(xùn)練撰寫技術(shù)文檔與學(xué)位論文的能力。第2頁(yè)畢業(yè)設(shè)計(jì)(論文)主要內(nèi)容:Qt的介紹與具體應(yīng)用;QT中的信號(hào)和槽函數(shù)的機(jī)制;畫(huà)圖板功能設(shè)計(jì);畫(huà)圖板界面設(shè)計(jì);畫(huà)圖板涂鴉功能實(shí)現(xiàn);畫(huà)圖板繪制基本圖形的實(shí)現(xiàn);實(shí)現(xiàn)編輯菜單功能;學(xué)生應(yīng)交出的設(shè)計(jì)文件(論文):1.內(nèi)容完整、層次清晰、敘述流暢、排版規(guī)范的畢業(yè)設(shè)計(jì)論文;2.包括畢業(yè)設(shè)計(jì)論文、源程序等內(nèi)容在內(nèi)的畢業(yè)設(shè)計(jì)電子文檔及其它相關(guān)材料。第3頁(yè)主要參考文獻(xiàn)(資料):[1]陳英,梁建武.Linux基礎(chǔ)及應(yīng)用教程.水利水電出版社,2008,29-42[2]倪繼利.Qt以及l(fā)inux操作系統(tǒng)窗口設(shè)計(jì).電子工業(yè)出版社,2006,45-152[3]BlakowskiG,SteinmetzR.Amediasynchronizationsurvey:referencemodel,specification,andcasestudies[J].IEEEJournalSelectedAreasinCommunications,1996,14(1):5-35[4]Linux技術(shù)及其應(yīng)用.計(jì)算機(jī)應(yīng)用,2000,20(7):5-6[5]Linux應(yīng)用開(kāi)發(fā)詳解.機(jī)械工業(yè)出版社,2004,53-68[6]林銳,韓永泉.高質(zhì)量程序設(shè)計(jì)指南:C++、C語(yǔ)言.電子工業(yè)出版社,2007,124-155[7]JonathanCorbet,AlessandroRubini,GregKoah-Hartman.LinuxDeviceDriver.Jan2005[8]錢能.C++程序設(shè)計(jì)教程.清華大學(xué)出版社,2006,56-88[9]QtEmbedded的嵌入式Linux應(yīng)用程序的實(shí)現(xiàn),計(jì)算機(jī)應(yīng)用與軟件,2006,2[10]ISO/IECJTC1/SC29/WG11.IS14496:Genericcodingofmovingpicturesandassociatedaudioinformation(MPEG-4).ISO/IEC,2000:10-15[11]譚浩強(qiáng).C++面向?qū)ο蟪绦蛟O(shè)計(jì).清華大學(xué)出版社,2006,89-100[12]王子強(qiáng),劉海燕,李媛州.Linux下圖形用戶界面程序的開(kāi)發(fā)與實(shí)現(xiàn),計(jì)算機(jī)應(yīng)用與軟件,2005專業(yè)班級(jí)軟件1025班學(xué)生南茜要求設(shè)計(jì)(論文)工作起止日期2014年3月17日~2014年6月27日指導(dǎo)教師簽字日期2014年3月17日教研室主任審查簽字日期系主任批準(zhǔn)簽字日期畫(huà)圖板的設(shè)計(jì)與實(shí)現(xiàn)摘要本文的主要內(nèi)容是記述同題課程設(shè)計(jì)中的一些關(guān)鍵技術(shù)和輔助文檔。本文的目標(biāo)是設(shè)計(jì)一款基于Qt編程語(yǔ)言的簡(jiǎn)易畫(huà)圖板,使其具有涂鴉,繪制基本圖形等功能。本程序具有一定的實(shí)用意義和價(jià)值。功能分裝良好可以方便的根據(jù)需求進(jìn)行擴(kuò)充。本文運(yùn)用材料綜述的方法,首先記述了編程環(huán)境的搭建,介紹了Qt的優(yōu)點(diǎn),Qt編碼規(guī)范和Qt的雙緩沖機(jī)制在繪圖中的運(yùn)用。著重分析了Qt在軟件開(kāi)發(fā)中的編程機(jī)制,并根據(jù)應(yīng)用特點(diǎn)進(jìn)行了設(shè)計(jì)的構(gòu)件與算法的需求分析。其次在需求分析中給出是可行性分析,然后放入功能分析圖和流程圖幫助梳理設(shè)計(jì)思路。最后在詳細(xì)設(shè)計(jì)階段完成編碼,實(shí)現(xiàn)程序功能,得到一個(gè)功能健全的畫(huà)圖板應(yīng)用程序。在本文中將設(shè)計(jì)并實(shí)現(xiàn)畫(huà)圖板的一些基本功能,例如:新建,打開(kāi),保存,清空,放大,縮小,還原,基本圖形繪制,轉(zhuǎn)換畫(huà)筆顏色等功能。最后運(yùn)行結(jié)果符合設(shè)計(jì)要求,方案可行。經(jīng)過(guò)測(cè)試后程序功能實(shí)現(xiàn)良好。關(guān)鍵詞嵌入式LinuxQT;圖形用戶界面;電子畫(huà)板;雙緩沖機(jī)制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,標(biāo)題小三居中,1"\h17488摘要 i20792Abstract ii267921引言 1294541.1研究背景 1451.2研究的目的和意義 2144761.3程序設(shè)計(jì)的環(huán)境選擇 25562畫(huà)圖板設(shè)計(jì)的技術(shù)背景 3223422.1Qt的主要特征 3254652.2QTcreator簡(jiǎn)介 3307272.3Qtcreator環(huán)境搭建 4153212.4QT編程機(jī)制信號(hào)與槽機(jī)制簡(jiǎn)介 595022.5Qt編碼規(guī)范 7244642.6GDI繪圖理論基礎(chǔ) 9205192.7雙緩沖機(jī)制 9221562.8雙緩沖技術(shù)繪圖 10212683畫(huà)圖板項(xiàng)目需求分析 1296703.1可行性研究 12119053.1.1經(jīng)濟(jì)可行性 12176153.1.2技術(shù)可行性 1260363.1.3運(yùn)行可行性 12104083.1.4時(shí)間可行性 12148423.1.5法律可行性 12220863.2功能分析 13304083.3系統(tǒng)用例分 13170283.4性能需求 13284743.4.1應(yīng)用需求分析 14128743.4.2運(yùn)行需求分析 14252653.4.3其他需求分析 1495154畫(huà)圖板概要設(shè)計(jì) 15249264.1畫(huà)圖板功能模塊關(guān)系與劃分 15260674.2畫(huà)圖板總體設(shè)計(jì)流程圖 16304535畫(huà)圖板詳細(xì)設(shè)計(jì) 17294215.1畫(huà)圖板界面設(shè)計(jì) 1822035.1.1畫(huà)圖板的界面元素聲明 18281575.1.2圖板界面布局實(shí)現(xiàn) 19166465.2畫(huà)圖板功能詳細(xì)設(shè)計(jì) 2069265.2.1畫(huà)圖板的文件編輯功能實(shí)現(xiàn) 20157445.2.2畫(huà)圖板的圖片編輯功能實(shí)現(xiàn) 2317215.3畫(huà)圖板繪圖功能實(shí)現(xiàn) 2648165.3.1繪圖板的基本圖形繪制功能實(shí)現(xiàn) 2628085.3.2繪圖板自由繪圖功能實(shí)現(xiàn) 3046505.3.3畫(huà)圖板畫(huà)圖輔助選項(xiàng)實(shí)現(xiàn) 33324736畫(huà)圖板程序測(cè)試 35183456.1測(cè)試的重要性及目的 354956.2測(cè)試的方法 36258996.3測(cè)試用例 36216946.4測(cè)試結(jié)果 363035結(jié)論 388179參考文獻(xiàn) 395776致謝 4015481外文原文 411588中文翻譯 49引言隨著操作系統(tǒng)不斷的更新?lián)Q代,其自帶的畫(huà)圖板界面及功能也是不斷變化著,像是xp、vista、win7,它們的畫(huà)圖板的界面布局風(fēng)格以及功能都有所不同。

這表明盡管是簡(jiǎn)簡(jiǎn)單單的一個(gè)操作系統(tǒng)自帶畫(huà)圖板,系統(tǒng)設(shè)計(jì)人員也沒(méi)有停止對(duì)它的不斷研與探索,他們?cè)诓粩鄬ふ抑诵曰⒏軡M足大眾需求的改變。

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

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

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

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

://trolltech/。

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

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

下載qt-x11-free-3.2.1.tar.gz和qt-x11-opensource-src.tar.gz二進(jìn)制包。

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

zxvf

-C

/usr/local

到/usr/local目錄

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

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

#vi

/root/.bash_profile

//打開(kāi)root用戶.bash_profile文件

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

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!(強(qiáng)制保存退出)

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

/root/.bash_profile

四、進(jìn)入Qt解壓縮的目錄

#cd

$QTDIR或#cd

QTDIR

。

使用configure工具來(lái)構(gòu)建Qt庫(kù)和它提供的工具:./configure(./configure

--help

配置選擇的列表。例:-thread選項(xiàng)來(lái)創(chuàng)建這個(gè)庫(kù)的一個(gè)多純種版本。)

最后一步就要進(jìn)入漫長(zhǎng)的Qt安裝編譯時(shí)間了,有事的就出去辦事吧,安裝編譯時(shí)間大約需要兩個(gè)小時(shí)。

編譯命令:make

安裝命令:make

install

。首先我們進(jìn)入Linux的圖形界面,打開(kāi)一個(gè)控制終端(在桌面空間處單擊鼠標(biāo)右鍵,在彈出的單菜中選擇“新建控制終端”。),在控制終端里面新建一個(gè).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程序構(gòu)件截圖QT編程機(jī)制信號(hào)與槽機(jī)制簡(jiǎn)介信號(hào)/槽機(jī)制是QT區(qū)別于其它工具包的最有顯著特征的部分。在GUI編程中,當(dāng)一個(gè)widget改變,我們經(jīng)常希望另外的widget被告知。更普遍地,我們希望任何的對(duì)象都可以互相通信。比如,如果用戶點(diǎn)擊close按鈕,我們大多希望調(diào)用窗口的close()方法。以前的工具集通過(guò)callback來(lái)實(shí)現(xiàn)這種通信。callback是指向函數(shù)的指針,因此,若果你想讓處理函數(shù)通知你某些事件,你可以傳遞給另一個(gè)函數(shù)一個(gè)指針來(lái)處理函數(shù)。處理函數(shù)在適當(dāng)?shù)臅r(shí)候調(diào)用callback。Callbacks有兩種根本的缺陷:第一,它們不是類型安全的,我們無(wú)法確定處理程序會(huì)調(diào)用正確參數(shù)的回調(diào)函數(shù)(callback)。第二,回調(diào)函數(shù)耦合于處理函數(shù),因?yàn)樘幚砗瘮?shù)必須知道去調(diào)用哪個(gè)回調(diào)函數(shù)。Qt提供了回調(diào)的替代技術(shù):信號(hào)和槽。當(dāng)特定事件發(fā)生時(shí)引發(fā)相應(yīng)的信號(hào)。Qt的widget有許多預(yù)定義的信號(hào),同時(shí)我們也可以為widget子類添加我們自定義的信號(hào)。槽是回應(yīng)特定的信號(hào)時(shí)所調(diào)用的方法。Qt的窗口部件有許多預(yù)定義的槽,但是我們也可以為窗口部件的子類田間我們自定義的槽,以處理我們所感興趣的信號(hào)。信號(hào)槽機(jī)制是類型安全的:信號(hào)的簽名必須跟接受的槽的簽名相匹配(事實(shí)上,槽的簽名可以比信號(hào)的簽名短,因?yàn)樗梢院雎灶~外的字段)。因?yàn)楹灻窍嗳莸?,編譯器就可以幫我們檢測(cè)類型的不匹配。信號(hào)和槽是松耦合的:一個(gè)類產(chǎn)生一個(gè)信號(hào),并不知道而且不關(guān)心那個(gè)槽接受該信號(hào)。Qt的信號(hào)槽機(jī)制保證,如果你連接了一對(duì)信號(hào)槽,槽會(huì)在適當(dāng)?shù)臅r(shí)間帶著信號(hào)的參數(shù)被調(diào)用。信號(hào)和槽可以附帶任何類型任何數(shù)量的參數(shù)。信號(hào)和槽是完全類型安全的。槽可以用來(lái)接受信號(hào),不過(guò)槽也是普通的成員函數(shù)。類似于對(duì)象不知道誰(shuí)接受它的信號(hào),槽也不知道是否有信號(hào)連接自己。這保證了Qt可以創(chuàng)建完全獨(dú)立的組件。一個(gè)信號(hào)可以連接無(wú)數(shù)的槽,并且一個(gè)槽可以連接你想要連接的信號(hào)。甚至可以直接連接兩個(gè)信號(hào)(當(dāng)?shù)谝粋€(gè)信號(hào)產(chǎn)生,立即產(chǎn)生第二個(gè)信號(hào))。信號(hào)和槽一起形成了一種強(qiáng)大的組件編程機(jī)制。QT的信號(hào)和槽的機(jī)制可以保證如果你把一個(gè)信號(hào)和一個(gè)槽連接起來(lái),槽會(huì)在正確的時(shí)間使用信號(hào)的參數(shù)而被調(diào)用。信號(hào)和槽可以使用任何數(shù)量、任何類型的參數(shù)。它們是完全類型安全的:不會(huì)再有回調(diào)核心轉(zhuǎn)儲(chǔ)(coredump)。可以把許多信號(hào)和你所希望的單一槽相連,并且一個(gè)信號(hào)也可以和所期望的許多槽相連。把一個(gè)信號(hào)和另一個(gè)信號(hào)直接相連也是可以的。總體來(lái)看,信號(hào)和槽構(gòu)成了一個(gè)強(qiáng)有力的組件編程機(jī)制。如果一個(gè)類要使用信號(hào)與槽機(jī)制,它就必須是從QObject或QObject的子類繼承,而且類的定義必須加上Q_OBJECT宏。signals、slots和emit是QT特有的關(guān)鍵字,分別用來(lái)表示信號(hào)、槽、和發(fā)送信號(hào),移除這些關(guān)鍵字和預(yù)處理程序,就可以使用“標(biāo)準(zhǔn)的C++編譯器”[6][7][8]。槽同其他函數(shù)一樣也具有訪問(wèn)權(quán)限,只是槽的訪問(wèn)權(quán)限決定了誰(shuí)可以和它相連,如一個(gè)publicslots:包含了任何信號(hào)都可以相連的槽。一個(gè)protectedslots:包含了只有這個(gè)類和它的子類的信號(hào)才能連接的槽。這就是說(shuō)這些槽只是類的實(shí)現(xiàn)的一部分,而不是它和外界的接口。一個(gè)privateslots:包含了只有這個(gè)類本身的信號(hào)可以連接的槽,甚至它的子類都沒(méi)有獲得連接的權(quán)利。圖2-2信號(hào)與槽機(jī)制示意圖

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

Device

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

Windows的GDI繪制的各種圖形(點(diǎn)、線、圓、多邊形、矩形等)是與設(shè)備無(wú)關(guān)的,即在屏幕的窗口內(nèi)繪圖與在打印機(jī)上繪圖是相似的。

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

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

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

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

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

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

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

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

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

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

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論