基于QT的校園導航系統(tǒng)的設計與實現(xiàn)畢業(yè)設計_第1頁
基于QT的校園導航系統(tǒng)的設計與實現(xiàn)畢業(yè)設計_第2頁
基于QT的校園導航系統(tǒng)的設計與實現(xiàn)畢業(yè)設計_第3頁
基于QT的校園導航系統(tǒng)的設計與實現(xiàn)畢業(yè)設計_第4頁
基于QT的校園導航系統(tǒng)的設計與實現(xiàn)畢業(yè)設計_第5頁
已閱讀5頁,還剩83頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

基于QT的校園導航系統(tǒng)的設計與實現(xiàn)本文主要是介紹利用Linux系統(tǒng)和QT制作校園導航系統(tǒng)的設計方法。使用的操作系統(tǒng)是Linux系統(tǒng),但是在windows系統(tǒng)下也是可以使用的,所使用的語言是c++,開北京郵電大學畢業(yè)論文設計MainlyintroducedinthispaperusingtheLinuxsystemandQTcampusnavigationsystemdesignmethod.UseoftheoperatingsystemisLinuxsystem,butalsocanuseunderWindowssystem,thelanguageisusedbyc++,developmenttoolsisQT.Themainpurposeofdesignistobeabletosimplywatchthesceneryofthewholecampus,whoisfamiliarwiththecampuscanknowthelocationofeachscenicspot,introduction,seetheschoolbuildings,includingthestructureofthepicturesandthedescriptionofthebuilding.Especially,thesystemcanfindouttheshortestdistancebetweentwobuildings,soastohelppeoplewhoarenotfamiliarwiththecampusrapidlyunderstandthecampusenvironment,andfindthebestwaytovisitthewholecampus,inaddition,thesystemcanalsoqueryallpathsbetweentwospots,helpgoingbackandforthwithgoodchoicepath.NavigationsystemisintheLinuxsystem(underLinuxdevelopment,alsocanrununderWindows),thefirstuserproducedusingQT,usingc++programminglanguagebasicdesign.FunctionandcombiningwiththeinterfaceThenavigationsystemisdesignedinthispapercanachievethefollowingthreefunctions:first,itcanmeasurethedistancebetweenthetwobuildings,atthesametimethequerypathinformationbetweentwositesatthesametime,providethepictureofthestartingpointandendpointbuildinginformation,tofacilitatebetterconfirmation;Second,itcanhelpvisitorsfrommanychoosetheshortestroute,atthesametimewillprovideallthepathbetweentwopoints;Third,itcanaddsomedescriptioninlandmarkinformationandpictures,youcanalsoviewfromthebuildingtoalltheotherpathinformationofthebuildingKeywordspathplanning;antalgorithm;thecampusnavigation;qt iAbstract 11.1概述 11.2研究背景 11.3研究目標 11.4本章小結 1 2 22.2QT實現(xiàn)的結構原理 2 32.3.1詳細描述 32.3.2QWidget事件簡介 4 62.5本章小結 73需求分析 83.1需求分析概述 83.2需求分析的特點 83.3需求分析需要完成的任務 83.4實際需求分析 93.4.1用戶需求分析 93.4.2功能需求分析 93.4.3實際需求分析 93.4.4系統(tǒng)性能需求分析 93.5本章小結 4總體設計 4.1總體設計概述 4.2系統(tǒng)總體設計描述 4.3系統(tǒng)總體設計模塊劃分 4.3.1主要模塊劃分圖 4.3.2顯示系統(tǒng)主界面模塊設計 4.3.3查詢導航有關人員模塊設計 4.3.4導航主界面的模塊的設計 4.4本章總結 5詳細設計 5.1詳細設計概述 5.2校園導航系統(tǒng)主程序流程圖 5.3單源最短路徑算法介紹 5.3.1Dijkstra(迪杰斯特拉)算法 5.3.2floyed(弗洛耶德)算法 5.4圖中節(jié)點與路徑的存儲 5.4.1節(jié)點的存儲 5.4.2節(jié)點間路徑長度的存儲 5.4.3整個圖的存儲 205.5本章總結 6系統(tǒng)實現(xiàn)及運行結果 6.1界面設計 6.1.1主窗體設計 6.1.2子頁面布局設計 6.1.3更換起始點的實現(xiàn) 6.1.4點擊主頁面中的查詢路徑具體實現(xiàn) 6.1.5點擊查看景點信息描述的實現(xiàn) 6.2圖的創(chuàng)建 6.3路徑查詢的具體實現(xiàn) 6.3.1單源最短路徑算法具體實現(xiàn) 6.3.2所有可達路徑的查詢的具體實現(xiàn) 6.3.3每一個點到它可達的所有點的查詢的具體實現(xiàn) 6.4選擇系統(tǒng)是否退出的具體實現(xiàn) 6.5本章小結 7測試 7.1測試目標 7.2測試預期結果 7.3測試用例的設計 7.4本章小結 結論 參考文獻 致謝 外文原文 中文翻譯 北京郵電大學畢業(yè)論文設計1現(xiàn)在科技越來越發(fā)達,手機上的軟件,電腦上的軟件越來越多,所以開發(fā)小的程序也越來越有必要。QT具備跨平臺,易擴展,界面華麗,性能穩(wěn)定等優(yōu)點。因此,以嵌入式處理器作為硬件平臺,以QT作為程序框架,兩者的完美結合必將成為未來技術的發(fā)展方向?,F(xiàn)在,汽車正在普及,道路不斷建設,城際間的經(jīng)濟往來更加頻繁,活動的區(qū)域也越來越大。為了提高生活質量,大量的休閑活動、探險活動的舉行使我們并不局限在自己認識的一小塊區(qū)域中,不認識道路,找不到目的地的情況也屢有發(fā)生。就此,各種各樣的導航儀逐漸走進我們的生活。無論什么導航儀最主要的部分都是電子地圖。開發(fā)電子地圖成為了導航儀的關鍵。根據(jù)調查,電子地圖制作困難而且價格相當昂貴,給導航儀的開發(fā)帶來了很多不便。自主繪制電子地圖,編寫電子地圖應用程序,不管是從經(jīng)濟上還是研究上都具有非常大的現(xiàn)在,各個學校都有了自己的導航系統(tǒng),但是開發(fā)工具語言,還有平臺不一樣。所以,如果擁有一個跨平臺的程序的話,那將會給我們的開發(fā)節(jié)省了大量的時間。QT正是一個支持多平臺的C++圖形用戶界面應用程序框架。它提供給應用程序開發(fā)者建立藝術級的圖形用戶界面所需的所用功能。Qt是完全面向對象的很容易擴展,并且允許真正地組件編程。所以使用QT作為應用程序框架是一個不錯的選擇。本課題名為校園地理信息系統(tǒng)。本系統(tǒng)以太原理工大學為模型,旨在建立一個本學校的導航系統(tǒng),可以根據(jù)不同人的要求,足不出戶,就可以瀏覽校園,得到各種信息基于上述背景,開發(fā)一個校園導航項目,使用linux搭配qt來構建這個項目。利用QT4作為系統(tǒng)應用層的程序框架。開發(fā)一個可以運行的小客戶端。這個客戶端雖然是在linux下開發(fā)的,但是它是可移植的,在windows下也可以運行。本章主要介紹本項目的選題背景、意義,選題目標。通過介紹,了解當今社會主要是校園,導航系統(tǒng)的需求以及重要性,明白研究該系統(tǒng)的必要性。北京郵電大學畢業(yè)論文設計22.1QT的背景介紹Qt是一個1991年由奇趣科技開發(fā)的跨平臺C++圖形用戶界面應用程序開發(fā)框架。它既可以開發(fā)GUI程序,也可用于開發(fā)非GUI程序,比如控制臺工具和服務器。Qt是面向對象的框架,使用特殊的代碼生成擴展(稱為元對象編譯器(MetaObjectCompiler;moc))以及一些宏,易于擴展,允許組件編程。2008年,奇趣科技被諾基亞公司收購,QT也因此成為諾基亞旗下的編程語言工具。2012年,Qt被Digia收購。2014年4月,跨平臺集成開發(fā)環(huán)境QtCreator3.1.0正式發(fā)布,實現(xiàn)了對于iOS的完全支持,新增WinRT、Beautifier等插件,廢棄了無Python接口的GDB調試支持,集成了基于Clang的C/C++代碼模塊,并對Android支持做出了調整,至此實現(xiàn)了全面支持iOS、Android、QtCreator包含了一套用于創(chuàng)建和測試基于Qt應用程序的高效工具,包括:一個高級的C++代碼編輯器上下文感知幫助系統(tǒng)可視化調試器源代碼管理項目和構建管理工具.Irix,FreeBSD,面向對象:Qt的良好封裝機制使得Qt的模塊化程度非常高,可重用性較好,對于用戶開發(fā)來說是非常方便的。Qt提供了一種稱為signals/slots的安全類型來替代callback,這使得各個元件之間的協(xié)同工作變得十分簡單。Qt/Embedded是Trolltech公司開發(fā)的面向嵌入式系統(tǒng)的Qt版本,與X11版本的Qt在最大程度上接口兼容,采用幀緩存(framebuffer)作為底層圖形接口。Qt/Embedded類庫完全采用C++封裝,并且有著豐富的控件資源以及較好的可移植性,大范圍的Qt/EmbeddedAPI可用于多種開發(fā)項目。Qt/Embedded的實現(xiàn)結構如圖2-1所示:QT的應用程序QT的圖形事件QT/EmbeddedFrameBuffer設備驅動0S:Linux操作系統(tǒng)件平臺圖2-1QT的實現(xiàn)結構圖Qt/Embedded的底層圖形引擎基于framebuffer。Framebuffer驅動程序的實現(xiàn)分為兩個方面:一方面是對LCD及其相關部分的初始化,包括畫在緩沖區(qū)的創(chuàng)建3和對DMA通道的設置;另外一方面是對畫面緩沖區(qū)的讀寫,具體到代碼為read、write、lseek等系統(tǒng)調用接口。至于將畫面緩沖區(qū)的內(nèi)容輸出到LCD顯示屏上,則由硬件自動完成。對于軟件來說是透明的。當對于DMA通道和畫面緩沖區(qū)設置完成后,DMA開始正常工作,并將緩沖區(qū)中的內(nèi)容不斷發(fā)送到LCD上。這個過程是基于DMA對于LCD的不斷刷新的。基于該特性,framebuffer驅動程序必須將畫面緩沖區(qū)的存儲空間(物理空間)重新映射到一個不加高緩存和寫緩存的虛擬地址區(qū)間中,這樣能才保證應用程序通過mmap將該緩存映射到用戶空間后,對于該畫面緩存的寫操作能夠實時的體現(xiàn)在LCD上。QT程序是基于C++編寫的,圖形用戶界面編程同時需要運行效率和高水平的靈活性。Qt通過結合C++的速度為這一領域提供了Qt對象模型。Qt把下面這些特性添加到了C++當中:一種被稱為信號和槽的非常強大的機制;可查詢和可設計的屬性項;強大的事件和事件過濾器;根據(jù)上下文進行國際化的字符串翻譯;完善的時間間隔驅動的計時器等。許多Qt的特性是基于QObject的繼承,通過標準C++技術實現(xiàn)的。QApplication是必須構造的Qt主對象,需要在一開始的時候就構造這個對象,并把命令行參數(shù)傳遞給這個對象,每個Qt應用程序有且僅有一個QApplication對象,該對象必須在做其他事之前創(chuàng)建,這個對象處理一些底層操作,如事件處理、字符串本地化和控制界面外觀等。信號和信號處理函數(shù)是GUI應用程序用來響應用戶輸入的基本機制,也是所有GUI庫的核心特征,Qt的信號處理機制由信號(signal)和槽(slot)構成,它們相當于GTK+中的信號和回調函數(shù)。在Qt中回調函數(shù)就叫做槽。信號和槽用于對象間的通訊,它的基本語法為:connect(object1,signall,object2,slot1);QWidget類是所有用戶界面對象的基類。通俗的來講,基本上所有的UI類都是由QWidgetQt繼承出來的,而QWidget繼承于Q0bject,大家可以查閱Qtsource庫對象數(shù)據(jù)的聲明和使用窗口層次窗口部件是用戶界面的一個原子:它從窗口系統(tǒng)接收鼠標、鍵盤和其它事件,并且在屏幕上繪制自己的表現(xiàn)。每一個窗口部件都是矩形,并且它們按Z軸順序排列的。一個窗口部件可以被它的父窗口部件或者它前面的窗口部件蓋住一部分。QDialog是最普通的頂級窗口。不被嵌入到一個父窗口部件的窗口部件被叫做頂級窗口部件。通常情況下,頂級窗口部件是有框架和標題欄的窗口(盡管如果使用了一定的窗口部級窗口部件。非頂級窗口部件是子窗口部件。它們是它們的父窗口部件中的子窗口。你通常不能在視覺角度從它們的父窗口部件中辨別一個子窗口部件。在Qt中的絕大多數(shù)其它窗口部件僅僅作為子窗口部件才是有用的。(當然把一個按鈕作為或者叫做頂級窗口部件也是可能的,但絕大多數(shù)人喜歡把他們的按鈕放到其它按鈕當中,比如QDialog。)QWidget有很多成員函數(shù),但是它們中的一些有少量的直接功能:例如,北京郵電大學畢業(yè)論文設計4QWidget有一個字體屬性,但是它自己從來不用。有很多繼承它的子類提供了實際的功能,比如QPushButton、QListBox和QTabDialog等等。每一個窗口部件構造函數(shù)接受一個或兩個標準參數(shù):1.QWidget*parent=0是新窗口部件的父窗口部件。如果為0(默認),新的窗口部件將是一個頂級窗口部件。如果不是,它將會使parent的一個孩子,并且被parent的幾何形狀所強迫(除非你指定WType_TopLevel作為窗口部件標記)?;臼录?paintEvent()-只要窗口部件需要被重繪就被調用。每個要顯示輸出的窗口部件必須實現(xiàn)它并且不在paintEvent()之外在屏幕上繪制是明智的。*resizeEvent()-當窗口部件被重新定義大小時被調用。*mousePressEvent()-當鼠標鍵被按下時被調用。有六個鼠標相關事件,但是鼠標按下和鼠標釋放事件是到目前為止最重要的。當鼠標在窗口部件內(nèi)或者當它使用grabMouse()來捕獲鼠標時,它接收鼠標按下事件。*mouseReleaseEvent()-當鼠標鍵被釋放時被調用。當窗口部件已經(jīng)接收相應的鼠標按下事件時,它接收鼠標釋放事件。這也就是說如果用戶在你的窗口部件內(nèi)按下鼠標,然后拖著鼠標到其它某個地方,然后釋放,你的窗口部件接收這個釋放事件。這里有一個例外:如果出現(xiàn)在彈出菜單中,當鼠標鍵被按下時,這個彈出菜單立即會偷掉這個鼠標事件。*mouseDoubleClickEvent()-和它看起來也許不太一樣。如果用戶雙擊,窗口部件接收一個鼠標按下事件(如果他們沒有拿牢鼠標,也許會出現(xiàn)一個或兩個鼠標移動事件)、一個鼠標釋放事件并且最終是這個事件。直到你看到第二次點擊是否到來之前,不能從一個雙擊中辨別一個點擊。(這是為什么絕大多數(shù)圖形用戶界面圖書建議雙擊是單擊的一個擴展,而不是一個不同行為的觸發(fā)的一個原因。)如果你的窗口部件僅僅包含子窗口部件,你也許不需要實現(xiàn)任何一個事件處理器。如果你想檢測在子窗口部件中的鼠標點擊,請在父窗口部件的mousePressEvent()中調用子窗口部件的hasMouse()函數(shù)。接收鍵盤的窗口部件需要重新實現(xiàn)一些更多的事件處理器:*keyPressEvent()-只要鍵被按下和當鍵已經(jīng)被按下足夠長的時間可以自動重復了就被調用。注意如果Tab和Shift+Tab鍵被用在焦點變換機制中,它們僅僅被傳遞給窗口部件。為了強迫那些鍵被你的窗口部件處理,你必須重新實現(xiàn)QWidget::event()。*focusInEvent()-當窗口部件獲得鍵盤焦點(假設你已經(jīng)調用setFocusPolicy())時被調用。寫得好的窗口部件意味著它們能按照一種清晰但謹慎的方式來獲得鍵盤焦點。*focusOutEvent()-當窗口部件失去鍵盤焦點時被調用。一些窗口部件也許需要實現(xiàn)一些不太普通的事件處理器*mouseMoveEvent()-只要當鼠標鍵被按下時鼠標移動就會被調用。舉例來說,對于拖動,這個很有用。如果你調用setMouseTracking(TRUE),盡管沒有鼠標鍵被按下,你也會獲得鼠標移動事件。(注意這個使用鼠標跟蹤的應用程序在低下的X連接下不是很有用。(也可以)參考拖放信息。北京郵電大學畢業(yè)論文設計5*keyReleaseEvent()-只要鍵被釋放和當如果這個鍵是自動重復的并且被按下一段時間時就被調用。在這種情況下窗口部件接收一個鍵釋放事件并且對于每一個重復立即有一個鍵按下事件。注意如果Tab和Shift+Tab鍵被用在焦點變換機制中,它們僅僅被傳遞給窗口部件。為了強迫那些鍵被你的窗口部件處理,你必須重新實現(xiàn)QWidget::event()。*wheelEvent()—*enterEvent()*leaveEvent()當窗口部件擁有焦點時,只要用戶轉動鼠標滾輪就被調用。-當鼠標進入這個窗口部件屏幕空間時被調用。-當鼠標離開這個窗口部件的屏幕空間時被調用。*moveEvent()-當窗口部件相對于它的父窗口部件已經(jīng)被移動時被調用。*closeEvent()-當用戶關閉窗口部件時(或這當close()被調用時)被調用。這里還有一些不太明顯的事件。它們在qevent.h中被列出并且你需要重新實現(xiàn)event()來處理它們。event()的默認實現(xiàn)處理Tab和Shift+Tab(移動鍵盤焦點)并且其它絕大多數(shù)事件給上面提到的一個或更多的特定處理器。Qt::WindowFlags這兩個參數(shù)參閱官方文檔。Qt的WindowFlags有很多,實際使用時,若不關心窗口層次的話,大可不比太關心這個。比如說在Window上做應用開發(fā),即可。但若是做嵌入式開發(fā)就得好好看看這個屬性,整理好這部分屬性,有利于窗口管理。著重介紹幾個重要成員函數(shù):boolQWidget::close()[slot]關閉這個窗口部件。如果窗口部件被關閉,返回真,否則返回假。首先它發(fā)送給這個窗口部件一個QCloseEvent。如果它接收這個關閉事件,它就被隱藏了。QWidget::closeEvent()的默認實現(xiàn)是接收這個關閉事件。當最后一個可視的頂級窗口部件被關閉,QApplication::lastWindowClosed()信號被發(fā)射。注意窗口的enumQt::WidgetAttribute屬性,窗口默認屬性是Qt::WAMacOpaqueSizeGrip,設置上這個屬性意味著窗口調用close()只銷毀了UI想關,QWidget內(nèi)還有很多內(nèi)存空間沒有釋放,需調用delete銷毀QWidget。若需要在調用close時一并銷毀窗口可以給boolQWidget::event(QEvent*e)[虛保護]這是主事件處理器,它處理事件e。你可以在子類中被重新實現(xiàn)整個函數(shù),但是我們建議你使用一個特定的事件處理器來替代它。主事件首先把事件傳遞給所有已經(jīng)被安裝的事件過濾器。如果沒有過濾器中途截取這個事件,它調用一個特定的事件處理器。鍵按下和釋放事件被處理得和其它事件不同。event()檢查Tab和Shift+Tab并且試圖適當?shù)匾苿咏裹c。如果沒有窗口部件被焦點移入(或者鍵按下不是Tab或Shift+Tab),event()調用keyPressEvent()。如果它能夠把一個事件傳遞給沒個東西,這個函數(shù)就返回真,否則如果沒有任何東西想要這個事件,返回假。也可以參考closeEvent()、focusInEvent()、focusOutEvent()、enterEvent()、keyPressEvent()、keyReleaseEvent()、leaveEvent()、mouseDoubleClickEvent()、voidQWidget::paintEvent(QPaintEvent*)[虛保護]這個事件處理器可以在子北京郵電大學畢業(yè)論文設計6類中被重新實現(xiàn)來接收繪制事件。繪制事件就是重新繪制這個窗口部件的所有部分的一個請求。它可以是repaint()或update()的結果,或者因為這個窗口部件原來被變暗并且現(xiàn)在已經(jīng)不再被覆蓋了或者其它很多原因。很多窗口部件在當它們被請求時,它們很簡單地重新繪制整個界面,但是一些比較慢的窗口部件需要通過僅僅繪制被請求的區(qū)域QPaintEvent::region()進行優(yōu)化。這個速度優(yōu)化不會改變結果,在事件處理過程中繪制僅僅發(fā)生在被改變的區(qū)域中。例如,QListView和QCanvas就是這樣做的。Qt也試圖通過把多個繪制事件合并為一個來加快繪制速度。update()被調用幾次或者窗口當系統(tǒng)發(fā)送幾次繪制事件,Qt把它們合并為一個比較大區(qū)域(請參考QRegion::unite())的一個事件中。repaint()不允許這樣優(yōu)化,所以只要可能我們建議使用update()。當繪制事件發(fā)生,更新區(qū)域通常被擦除,所以你正在這個窗口部件的背景上繪制。這里有一些例外并且QPaintEvent::erased()告訴你這個窗口部件是否被擦除。背景可以通過使用setBackgroundMode()、setPaletteBackgroundColor()或setBackgroundPixmap()來設置。setBackgroundMode()的文檔詳細描述了背景,我們建議你去讀一下。voidQWidget::raise()[槽]把這個窗口部件升高到它的父窗口部件的棧的頂部。如果在屏幕上有與這個窗口部件重疊的兄弟,這個窗口部件將在它后來的這些兄弟之前變的可視了。也可以參考lower()和stackUnder()。voidQWidget::repaint(intx,inty,intw,inth,boolerase=TRUE)[槽]通過立即調用paintEvent()來直接重新繪制窗口部件,除非更新是失效的或者窗口部件被隱藏。如果erase為真,Qt在paintEvent()調用之前擦除區(qū)域(x,y,w,h)。如果w是負數(shù),它被width()-x替換,并且如果h是負數(shù),它被height()-y替換。如果你需要立即重新繪制,我們建議使用repaint(),比如在動畫期間。在絕大多數(shù)情況下,update()更好,因為它允許Qt來優(yōu)化速度并且防止閃爍。警告:如果你在一個函數(shù)中調用repaint(),而它自己又被paintEvent()調用,你也許會看到無線循環(huán)。update()函數(shù)從來不會產(chǎn)生循環(huán)。也可以參考update()、paintEvent()、updatesEnabled和2.4QT應用程序的實現(xiàn)由以上簡介可知,Qt是一個創(chuàng)建GUI程序的C++類庫,編寫Qt應用程序的主要工作是基于已有的Qt類編寫用戶類。Qt提供了一組范圍相當廣泛的C++類庫,并包含了幾種命令行和圖形界面的工具,有效地使用這些工具可以加速開發(fā)過程。QtDesigner:Qt設計器。用來可視化地設計應用程序界面。QtLinguist:Qt語言學家。用來翻譯應用程序。以此提供對多種語言的支持。Qmake:使用此工具可以由簡單的、與平臺無關的工程文件來生成編譯所需的Makefile。QtAssistant:關于Qt的幫助文件。類似于MSDN。可以快速地發(fā)現(xiàn)你所需要的幫moc:元對象編譯器。uic:用戶界面編譯器。在程序編譯時被自動調用,通過ui*h文件生成應用程序北京郵電大學畢業(yè)論文設計7Qt應用程序的設計使用基于工程的方法,并通過.pro文件進行工程管理。實現(xiàn)應用程序的第一步是編寫.pro文件,然后使用QT4自帶的qmake工具生成Makefile,最后進行源代碼的編譯。qmake-projectnmake隨著越來越多的第三方軟件公司利用Qt/Embedded開發(fā)嵌入式Linux下的應用軟件,Qt的應用已經(jīng)越來越廣泛。本章主要介紹了QT的背景和描述了QT實現(xiàn)的結構原理,還簡述了QT的相關特性。此外,也介紹了QT應用程序開發(fā)時的相關工具。北京郵電大學畢業(yè)論文設計83需求分析在系統(tǒng)工程及軟件工程中,需求分析指的是在創(chuàng)建一個新的或改變一個現(xiàn)存的系統(tǒng)或產(chǎn)品時,確定新系統(tǒng)的目的、范圍、定義和功能時所要做的所有工作。需求分析是軟件工程中的一個關鍵過程。在這個過程中,系統(tǒng)分析員和軟件工程師確定顧客的需要。只有在確定了這些需要后他們才能夠分析和尋求新系統(tǒng)的解決方法。在軟件工程的歷史中,很長時間里人們一直認為需求分析是整個軟件工程中最簡單的一個步驟,但在過去十年中越來越多的人認識到它是整個過程中最關鍵的一個過程。假如在需求分析時,分析者們未能正確地認識到顧客的需要的話,那么最后的軟件實際上不可能達到顧客的需要,或者軟件無法在規(guī)定的時間里完工。需求分析是一項重要的工作,也是最困難的工作。該階段工作有以下特點:(1)用戶與開發(fā)人員很難進行交流在軟件生存周期中,其它四個階段都是面向軟件技術問題,只有本階段是面向用戶的。需求分析是對用戶的業(yè)務活動進行分析,明確在用戶的業(yè)務環(huán)境中軟件系統(tǒng)應該"做什么”。但是在開始時,開發(fā)人員和用戶雙方都不能準確地提出系統(tǒng)要"做什么?"。因為軟件開發(fā)人員不是用戶問題領域的專家,不熟悉用戶的業(yè)務活動和業(yè)務環(huán)境,又不可能在短期內(nèi)搞清楚;而用戶不熟悉計算機應用的有關問題。由于雙方互相不了解對方的工作,又缺乏共同語言,所以在交流時存在著隔閡。(2)用戶的需求是動態(tài)變化的對于一個大型而復雜的軟件系統(tǒng),用戶很難精確完整地提出它的功能和性能要求。一開始只能提出一個大概、模糊的功能,只有經(jīng)過長時間的反復認識才逐步明確。有時進入到設計、編程階段才能明確,更有甚者,到開發(fā)后期還在提新的要求。這無疑給軟件開發(fā)帶來困難。(3)系統(tǒng)變更的代價呈非線性增長需求分析是軟件開發(fā)的基礎。假定在該階段發(fā)現(xiàn)一個錯誤,解決它需要用一小時的時間,到設計、編程、測試和維護階段解決,則要花2.5、5、25、100倍的時間。因此,對于大型復雜系統(tǒng)而言,首先要進行可行性研究。開發(fā)人員對用戶的要求及現(xiàn)實環(huán)境進行調查、了解,從技術、經(jīng)濟和社會因素三個方面進行研究并論證該軟件項目的可行性,根據(jù)可行性研究的結果,決定項目的取舍。雖然功能需求是對軟件系統(tǒng)的一項基本需求,但卻并不是唯一的需求,通常對軟件系統(tǒng)有下述幾方面的綜合要求。2.性能需求3.可靠性和可用性需求4.出錯處理需求5.接口需求北京郵電大學畢業(yè)論文設計98.將來可能提出的要求3.4實際需求分析目前,我們可以通過各種途徑接觸校園導航,例如以網(wǎng)頁形式的電子地圖,如Google地圖、GoogleEarth、百度地圖等,以車載GPS導航儀的電子地圖,如garmin任我游、紐曼、新科、城際通等,還有以手機導航功能出現(xiàn)的電子地圖,越來越多的手機將支持導航功能,諾基亞2010年在大規(guī)模普及手機導航。對此,本項目采用免費版的QT4作為程序框架,并且可以跨平臺使用,在開發(fā)成本上有著很大的優(yōu)勢。未來幾年,配備電子地圖的電子產(chǎn)品市場將逐漸走向成熟,市場需求和產(chǎn)品銷量會保持大幅增長,產(chǎn)品供應鏈中的各類企業(yè)將獲得巨大商機。尤其是隨著產(chǎn)品價格的不斷下降,這種快速發(fā)展的態(tài)勢會愈加明顯。電子地圖在中國市場必然會獲得更大的發(fā)展空由此,本項目也適應用戶需求,開發(fā)校園導航的相關功能:景點信息顯示、最短路徑查找等。3.4.2功能需求分析根據(jù)用戶需求,和對產(chǎn)品的定位,劃分以下功能:(1)設計太原理工大學的校園平面圖,所含景點不少于5個。以圖中頂點表示校內(nèi)各景點,存放景點名稱、代號、簡介等信息;以邊表示路徑,存放路徑長度等信息。(2)為來訪客人提供圖中任意景點相關信息的查詢。(3)為來訪客人提供圖中任意景點的問路查詢,即查詢?nèi)我鈨蓚€頂點之間的一條最短的簡單路徑。1.從我們學校的地圖任意選取了9個景點,并給它們的距離賦值2.本程序為用戶提供了各種各樣的查詢信息,各種查詢都可以任意選擇從代號或名稱,選擇時的任意錯誤都有做處理。本題抽象看成一個無向帶權圖。圖的結點代表景點,邊代表路徑。(1)任意一個景點的相關信息。(2)任意兩個景點間的最短路徑并輸出了這條路徑的路線。支持功能分析:(1)設計太原理工大學的校園平面圖,所含景點不少于5個。以圖中頂點表示校內(nèi)各景點,存放景點名稱、代號、簡介等信息;以邊表示路徑,存放路徑長度等信息。(2)為來訪客人提供圖中任意景點相關信息的查詢,主要包括景點圖片的觀看,景點描述信息的閱讀,景點到校園內(nèi)所有景點的可達路徑的了解。(3)為來訪客人提供圖中任意景點的問路查詢,即查詢?nèi)我鈨蓚€頂點之間的一條最短的簡單路徑,以及兩點間任意.對于該系統(tǒng),沒有嚴格的性能要求。1.首先,在沒有選擇初始點與終點是,系統(tǒng)不能夠崩潰,當點擊查詢按鈕是,不會北京郵電大學畢業(yè)論文設計沒有結果顯示,導致程序不是很美觀,要求系統(tǒng)在初始時,有相應的結果顯示。2.其次,可以允許運行多個界面,以防用戶需要進行路徑、景點、還有風景的比較,以便選擇更好的參觀方式。本章主要介紹了校園導航系統(tǒng)的需求分析,通過了解用戶的需求分析,來制定功能的需求分析,在通過功能的需求分析,來制定實際需求分析,以此為基礎進行導航系統(tǒng)北京郵電大學畢業(yè)論文設計4總體設計4.1總體設計概述總體設計概述這個階段必須回答的關鍵問題是:“概括地說,應該如何解決這個問首先,應該考慮幾種可能的解決方案。列如,目標系統(tǒng)的一些主要功能是用計算機自動完成還是用人工完成;如果使用計算機,那么是使用批處理方式還是人機交互方式;信息存儲使用傳統(tǒng)的文件系統(tǒng)還是數(shù)據(jù)庫……。通常至少應該考慮下述幾類可能的方1.低成本的解決方案。系統(tǒng)只能完成最必要的工作,不能多做一點額處的工作,只要能完成用戶需要的功能就可以了。2.中等成本的解決方案。這樣的系統(tǒng)不僅能夠很好地完成預定的任務,使用起來很方便,而且可能還具有用戶沒有具體指定的某些功能和特點。雖然用戶沒有提出這些具體要求,但是系統(tǒng)分析員根據(jù)自己的知識和經(jīng)驗斷定,這些附加的能力在實踐中將證明是很有價值的。這樣的系統(tǒng)具有用戶可能希望有的所有功能和特點。系統(tǒng)分析員應該使用系統(tǒng)流程圖或其他工具描述每種可能的系統(tǒng),估計每種方案的成本和效益,還應該在充分權衡各種方案的利弊的基礎上,推薦一個較好的系統(tǒng)(最佳方案),并且制定實現(xiàn)所推薦的系統(tǒng)的詳細計劃。如果用戶接受分析員推薦的系統(tǒng),則可以著手完成本階段的另一項主要工作。上面的工作確定了解決問題的策略以及目標系統(tǒng)需要哪些程序,但是,怎樣設計這些程序呢?結構設計的一條基本原理就是程序應該模塊化,也就是一個大程序應該由許多規(guī)模適中的模塊按合理的層次結構組織而成??傮w設計階段的第二項主要任務就是設計軟件的結構,也就是確定程序由哪些模塊組成以及模塊間的關系。通常用層次圖或結構圖描繪軟件的結構。在了解了系統(tǒng)總體設計的概念及要求后,完成自己的總體設計,由于這個項目是用于畢業(yè)設計的,并不是用于其他用途的,所以,就只有一個方案,沒有顧及成本,只有軟件方面,就是一個人開發(fā)的。4.2系統(tǒng)總體設計描述在對需求分析進行了系統(tǒng)研究后,決定了總體設計的方案。首先有一個系統(tǒng)的主界面,在這個主界面上,并沒有關于導航的其他信息,只有進入導航的入口,和有關開發(fā)人員的信息(主要包括學校,所在實訓基地,開發(fā)人員的基地指導老師,還有開發(fā)人員自己的信息查詢),除此之外,還有系統(tǒng)時間的顯示,查看當時的時間,還有學校名字的顯示。其次,是導航系統(tǒng)的主界面,在主界面中可以查看景點信息,查看路徑,選擇終點和起點,在不需要再使用系統(tǒng)時,可以選擇退出系統(tǒng)。4.3系統(tǒng)總體設計模塊劃分在了解了需求,分析了需求分析后,劃分出了模塊。主要的模塊由:顯示系統(tǒng)主界面,顯示導航系統(tǒng)主界面,查詢導航有關人員的模塊。北京郵電大學畢業(yè)論文設計在導航系統(tǒng)主界面主界面中有小的模塊,主要的模塊有:退出系統(tǒng)模塊,顯示景點信息模塊,查詢路徑模塊,選擇和更改起始點模塊。在劃分完模塊后,主要的模塊由顯示系統(tǒng)主界面,有顯示校園導航系統(tǒng)主界面,還有查詢相關等三個主要模塊,得到主要的模塊劃分框圖,如圖4-1所示:基于基于Qt的校園導航系統(tǒng)顯示系統(tǒng)主界面查詢系統(tǒng)有關人員顯示導航主界面圖4-1主要模塊劃分圖在我的系統(tǒng)中,首先現(xiàn)實的是整個系統(tǒng)的主界面,并不會直接進入到導航界面,顯得有點突兀,所以有一個整個系統(tǒng)的主界面,在從這個界面中進入到導航系統(tǒng)的主界面,其中,在選擇進入導航系統(tǒng)時,有兩種選擇:1.點擊開始按鈕,2在主頁面上,有一張學校的圖片,點擊圖片也會進入到導航主系統(tǒng)。如圖4-2所示:進入到導航系統(tǒng)系統(tǒng)圖4-2系統(tǒng)主界面模塊細分圖在退出系統(tǒng)時,也可以有多種選擇,可以選擇直接推出,也可以選擇重新使用系統(tǒng),提供多種選擇。北京郵電大學畢業(yè)論文設計如圖4-3所示:圖4-3退出系統(tǒng)模塊劃分圖4.3.3查詢導航有關人員模塊設計不論是在系統(tǒng)主界面,還是在導航主界面中,在界面的下端都有一個模塊是用來查詢與該畢業(yè)設計有關的人員,有關的人員主要有所在的學校、所在的培訓基地,開發(fā)者本人,以及開發(fā)者的基地指導老師,··的模塊設計如下。如圖4-4所示:查看相關人員信息查看相關人員信息查詢導師信息查詢開發(fā)者信息查詢學校信息查詢基地信息圖4-4查看相關人員模塊細分圖4.3.4導航主界面的模塊的設計在這個畢業(yè)設計中,最重要的是,校園導航系統(tǒng)的實現(xiàn)。在這個系統(tǒng)中,我要實現(xiàn)的功能有查詢兩個景點之間的最短路徑,兩個景點間的所有路徑,每個景點的信息查詢 (主要包括景點描述信息,該景點可以到達的所有其他景點的最短路徑信息),還有在切換起始點和終點的時候,同時出現(xiàn)這兩個景點的圖片,當點擊查詢路徑按鈕是,則在該位置上出現(xiàn)的是學校的總體布局圖。首先,得到導航系統(tǒng)主界面的主功能圖。如圖4-5所示:同的窗口終點圖4-5校園導航主界面模塊劃分圖北京郵電大學畢業(yè)論文設計在查詢路徑的時候,同時需要干兩件事,在一個地方現(xiàn)實最短路徑及其長度,在另一個地方顯示所有這兩個景點之間的路徑。如圖4-6所示:路徑查詢路徑查詢最短路徑查詢可達路徑查詢圖4-6路徑查詢模塊細分圖在本章中,我主要的工作就是,完成總體設計,得到模塊劃分圖,和各個模塊的細分圖,在接下來的系統(tǒng)設計中,以此為基礎來進行詳細設計。北京郵電大學畢業(yè)論文設計5詳細設計總體設計階段以比較抽象概括的方式提出了解決問題的辦法。詳細設計階段的任務就是把解法具體化,也就是回答下面這個關鍵問題:“應該怎樣具體地實現(xiàn)這個系統(tǒng)這個階段的任務還不是編寫程序,而是設計出程序的詳細規(guī)格說明。這種規(guī)格說明的作用很類似于其他工程領域中工程師經(jīng)常使用的工程藍圖,它們應該包含必要的細節(jié),程序員可以根據(jù)它們寫出實際的程序代碼。研究一下一般的詳細設計主要需要完成什么樣的功能。詳細設計的主要任務是設計每個模塊的實現(xiàn)算法、所需的局部數(shù)據(jù)結構。詳細設計的目標有兩個:實現(xiàn)模塊功能的算法要邏輯上正確和算法描述要簡明易懂。(1)為每個模塊進行詳細的算法設計。用某種圖形、表格、語言等工具將每個模塊處理過程的詳細算法描述出來。(2)為模塊內(nèi)的數(shù)據(jù)結構進行設計。對于需求分析、概要設計確定的概念性的數(shù)據(jù)類型進行確切的定義。(3)為數(shù)據(jù)結構進行物理設計,即確定數(shù)據(jù)庫的物理結構。物理結構主要指數(shù)據(jù)庫的存儲記錄格式、存儲記錄安排和存儲方法,這些都依賴于具體所使用的數(shù)據(jù)庫系統(tǒng)(4)其他設計:根據(jù)軟件系統(tǒng)的類型,還可能要進行以下設計:①代碼設計。為了提高數(shù)據(jù)的輸入、分類、存儲、檢索等操作,節(jié)約內(nèi)存空間,對數(shù)據(jù)庫中的某些數(shù)據(jù)項的值要進行代碼設計。②輸入/輸出格式設計。③人機對話設計。對于一個實時系統(tǒng),用戶與計算機頻繁對話,因此要進行對話方式、內(nèi)容、格式的具體設計。(5)編寫詳細設計說明書。(6)評審。對處理過程的算法和數(shù)據(jù)庫的物理結構都要評審。由于該項目是自己實現(xiàn)的,所以就沒有復雜的流程。在確定了總體設計后,畫出詳細設計中,主流程圖。點擊開始就進入了導航主系統(tǒng),進入到主系統(tǒng)后,就會實例化一系列的類的對象,主要是窗口的實例化,還有圖的實例化,所有的實例化后,就可以進行導航了。如圖5-1所示:開始地圖初始化N顯示信息N退出Y退出導航?N確定?YYN圖5-1程序總體流程圖5.3單源最短路徑算法介紹在我的程序中,需要使用到路徑查詢,最重要的就是最短路徑查詢,所以需要設計Dijkstra(迪杰斯特拉)算法是典型的單源最短路徑算法,用于計算一個節(jié)點到其他所有節(jié)點的最短路徑。主要特點是以起始點為中心向外層層擴展,直到擴展到終點為止。Dijkstra算法能保證找到從起點到終點的一條最優(yōu)路徑,只要路徑權值不會為負。Dijkstra一般的表述通常有兩種方式,一種用永久和臨時標號方式,一種是用OPEN,CLOSE表的方式,這里均采用永久和臨時標號的方式。注意該算法要求圖中不存在負權回路。北京郵電大學畢業(yè)論文設計))算法的具體步驟如下:(1)初始化時,S只包含原點,即S={v},頂點v到自己的距離為0。U包含除v外的其他頂點,v到U中頂點u的距離為邊上的權或者INFINITE(無通路)。(2)從U中選一點K,頂點v到頂點k的距離最小,然后把頂點k加入S中(該選定的距離就是v到k的最短路徑長度)。intmin=INFINITE;if(done[i]!=-1)continue;elseif(distance[i]<min){min=distance[i];no=i;(3)以頂點k為新考慮的中間點,修改v到U各頂點距離:若從源點v到頂點u(u屬于U)的距離(經(jīng)過頂點k)比原來距離(不經(jīng)過k)短,則修改頂點u的距離值,修改后的距離值的頂點k的距離加上邊<k,u>上的權。for(map<int,int>:iteratorit=m_edges2[no].begin();it!=m_edges2[no].end();it++){if(done[(*it).first]!=-1)continue;elseif((distance[no]+(*it).second)<distance[(*it).first]){distance[(*it).first]=distance[no]+(*it).second;from[(*it).first]=no;(4)重復(2)和(3)直到S包含所有的頂點。Floyd-Warshall算法用來找出每對點之間的最短距離。它需要用鄰接矩陣來儲存邊,這個算法通過考慮最佳子路徑來得到最佳路徑。注意單獨一條邊的路徑也不一定從任意一條單邊路徑開始。所有兩點之間的距離是邊的權,或者無窮大,如果兩點北京郵電大學畢業(yè)論文設計之間沒有邊相連。對于每一對頂點u和v,看看是否存在一個頂點w使得從u到w再到v比己知的路徑更短。如果是更新它。求解所有點間的路徑需要進行n次試探。對于頂點i到頂點j的路徑長度,首先考慮讓路徑經(jīng)過頂點1,比較路徑(i,j)和(i,1,j)的長度取其短者為當前求得的最短路徑長度。對每一對頂點的路徑都做這樣的試探,則可求得一個矩陣設為A(1),求n次即得每對頂點間的最短路徑A(n)。弗洛伊德算法仍然使用圖的鄰接矩陣arcs[n+1][n+1]來存儲帶權有向圖。算法的基本思想是:設置一個nxn的矩陣A(k),其中除對角線的元素都等于0外,其它元素a(k)[i][i]表示頂點i到頂點j的路徑長度,K表示運算步驟。開始時,以任意兩個頂點之間的有向邊的權值作為路徑長度,沒有有向邊時,路徑長度為,當K=0時,A(O)[i][j]=arcs[i][j],以后逐步嘗試在原路徑中加入其它頂點作為中間頂點,如果增加中間頂點后,得到的路徑比原來的路徑長度減少了,則以此新路徑代替原路徑,修改矩陣元素。具體做法為:第一步,讓所有邊上加入中間頂點1,取A[i][j]與A[i][1]+A[1][j]中較小的值作A[i][j]的值,完成后得到第一次的查詢。第二步,讓所有邊上加入中間頂點2,取A[i][j]與A[i][2]+A[2][j]中較小的值完成后得到A2)…,如此進行下去,當?shù)趎步完成后,得到A“,A”即為我們所求結果,A”[i][j]表示頂點i到頂點j的最短距離。因此,弗洛伊德算法可以描述為:A[i][j]=arcs[i][j];//arcs為圖的鄰接矩陣A[i][j]=min{A?-D[i][j],A?-)[i][k]+A?~D[k][j]};//其中k=1,2,…n定義一個n階方陣序列:D(-I),D(0),.….,D(n-l).D()[i][j]=min{D(-1)[i][i],D(k-1)[i][k]+D(~1)[k][j]},k=0,1,.…n-1D()[i][j]是從頂點vi到vj,中間頂點是v0的最短路徑的長度,D)[i][i]是從頂點v;到vj,中間頂點的序號不大于k的最短路徑長度,D(n-1)[i][j]是從頂點v;到v;的最短路徑長度。北京郵電大學畢業(yè)論文設計C語言為代碼實現(xiàn)如圖5-2所示:/用Floyd算法求有向網(wǎng)G中各對頂點v和w之間的最短路徑p[v][w]及其//帶權長度D[v][v]。若P[v][w][u]為TRE,則u是從v到w當前求得最#各對結點之間初始已知路徑及距離for(w=0;w<G,vexrum;++v)|far(u=0;u<G,vemun;+4u)P[v][w][u]=FAISE;i(D[v][w]<INFINLTY)|/從v到w有直接路徑p[v][w][v]=TRUE;P[v][w][w]=TKE;for(v=0;y<6,venun;++v)for(w=0:w<G.vuxnin;++w)(D[v][u]+D[u][w]<D[v][w]){//從v經(jīng)u到w的一條路徑更短D[v][w]-D[v][u]+b[u][w];for(i=0;i<G.vexmm;++1)P[v][w][i]=p[v][u][i]Ip[u][w][t];//if圖5-2(弗洛耶德)算法c語言為代碼在我的系統(tǒng)中,我使用的是鄰接矩陣的方式來存儲和表示兩個景點之間的距離,所以我打算使用的方法是floyed(弗洛耶德)算法。5.4圖中節(jié)點與路徑的存儲在圖中,每個節(jié)點都有多個信息,首先有代號,有名稱,有對每個節(jié)點的描述,所以要用結構體進行存儲。我采用的是fengjing結構體:intnum;//存放代號stringsight;//存放風景名稱stringdescri;//存放風景簡介在結構體中,把一個學校建筑的信息都存儲起來了。在校園導航系統(tǒng)中,最主要的是找到兩個節(jié)點中的最短路徑,所以兩個節(jié)點是否直接可達,即兩個點的距離的存儲,為了存儲兩個點的路徑,與普通的int值區(qū)分開,我用了一個結構體來存儲。北京郵電大學畢業(yè)論文設計使用的是結構體ac,結構體ac來存儲倆點的距離。intjl;//兩個景點間的距離在校園導航系統(tǒng)中要把學校的概貌抽象到一個圖中,所以這個圖中存儲的信息很多,主要有:圖中的節(jié)點數(shù),圖中的直接可達路徑數(shù),還要存儲每個結點的信息,我一我用了一個結構體來進行整個圖的存儲,使用的是結構體zhuyao:fengjingF[max];//存放圖中的頂點,即景點acH[max][max];//存放圖中的邊,即為景點間的距離intn;//存放頂點數(shù)inte;//存放邊數(shù)我把這些結構體都實例化后放到了一個類graph中:景點與景點中的距離是以二維數(shù)組的方式存儲在圖中的,所以相當于是以鄰接矩陣的方式來存儲的,所以在球最短路徑時,使用的是floyed(弗洛耶德)算法。本章詳述了整個軟件各部分功能的詳細設計,主要包括節(jié)點間路徑長度的存儲景點信息的存儲,圖的存儲,同時還介紹了Dijkstra算法的實現(xiàn)和設計和floyed算法的實現(xiàn)和設計。我主要使用的是floyed算法。北京郵電大學畢業(yè)論文設計6系統(tǒng)實現(xiàn)及運行結果主窗體classMyWidget繼承QWidget基類,使得地圖可以充滿整個窗體顯示,在主窗體中有自己自定義的按鈕Mybutton繼承QPushbotton,還使用了系統(tǒng)自己的QPushbotton,還有QMessageBox三種控件。自定義的按鈕Mybutton,發(fā)送信號給主窗體的槽函數(shù)clickwec_slot()實現(xiàn)由系統(tǒng)首頁進入到導航頁。實現(xiàn)語句如下:connect(schoolwec,SIGNAL(click()),this,SLOT(clickwecslot()))系統(tǒng)自己的QPushbotton,有4個school_src,jidi_src,student_src和teacher_src,4個按鈕均勻的分布在系統(tǒng)首頁的最低端,無論頁面如何改變,這4個按鈕一直存在;分別發(fā)送信號到相應的槽函數(shù),實現(xiàn)相應的頁面跳轉:假如點擊的是學校太原理工大學的按鈕,則進入的是如下頁面:進入太原理工的主頁面。如圖6-1所示:太壓們衛(wèi)大學太壓們衛(wèi)大學acrraarwm四前#利之單法表一件指的和理的內(nèi)首紅謝時四帶第*2014*W號生和*意式北作解側四性他理市保員梁按據(jù)應業(yè)作的本熱和性稱落n3%和P=mR2-#iF+lTn=mmy和林基a1*=m*=AH題U色圖6-1點擊系統(tǒng)主界面下端的學校按鈕進入的界面點擊基地按鈕,則進入上海杰普的官方網(wǎng)站。北京郵電大學畢業(yè)論文設計如圖6-2所示:上海杰普軟件科技有限公司上海杰普軟件科技有限公司班#2直土五論)工地再開上武化開EBA*之m00H #料類便律行*Raml程體府計*00-圖6-2點擊基地主界面下端的基地按鈕進入的界面設置了鼠標提示事件:this->setToolTip("點擊進入太原理工大學導航系統(tǒng)");最后使用布局管理器對以上控件進行布局。利用addWidget()函數(shù)將控件添加進布局管理器,實現(xiàn)布局。并且設置每個控件的屬性。在主程序中,每個模塊我都把他封裝在一個類中,這樣便于代碼的管理。global=newQVBoxLayout(this)global是我自己添加的一個總的布局,屬于整個系統(tǒng)的總的布局。m_url_lay=newMyUrlLay();m_url_lay是我自己封裝的一個類的對象,主要包括的是我在程序中使用到的網(wǎng)頁鏈接major=newQVBoxLayout;major是我自己添加的一個布局,主要是整個程序的主要顯示頁面。m_start_lay=newMyStart();m_start_lay是我自己封裝的一個類的對象,主要包括的是校園導航的開始和結m_title=newQHBoxLayout;top=newMyShowPic;bottom=newMySelect;center=newMyShowSpot;showtext=newMyShowPath;all_bottom=newMyBottom;mtitle是使用的系統(tǒng)定義的布局。top是我自己實現(xiàn)的,主要包含我需要展示的圖片。bottom是我自己實現(xiàn)的,主要包含我的選擇地點的控件。是我自己實現(xiàn)的,主要包含我需要展示的經(jīng)典的信息。Showtext是我自己實現(xiàn)的,主要用于展示我的路徑的信息。北京郵電大學畢業(yè)論文設計all_bottom是我自己實現(xiàn)的,主要用于展示系統(tǒng)的時間信息。school_wec->setText(“歡迎進入太原理工大學”);schoolwec->setMouseTracking(true);school_wec是主界面上的進入系統(tǒng)的按鈕,其余的設置都在對應的類中封裝了。主界面布局的代碼實現(xiàn):QPalettepalette(this->palette());palette.setColor(QPalette::Background,QColor(255,251,240));this->setPalette(palette);//m_title=newQHBoxLayout;school_wec->setMouseTracking(true);school_wec->setSizePolicy(QSizePolicy:Ignored,QSizePolicy::Ignored);connect(m_start_lay->m_exit,SIGNAL(clicked)),this,SLOT(clickexitbtn_slot)));connect(mstart_lay->m_start,SIGNAL(clicked)),this,SLOT(clickwec_slot)));src_row=0;show_wid=newQWidget;m_show_fengh=newQTextEdit;m_show_fengh->setReam_show_fengh->setStyleSheet("background-color:rgb(255,251,240)");QFontfont=m_font.setPointSize(13);m_show_fengh->setFont北京郵電大學畢業(yè)論文設計相應的系統(tǒng)主界面如圖6-3所示:圖6-3系統(tǒng)主界面當鼠標移到主頁面上的學校的圖片時,會有相應的提示出現(xiàn),提示,點擊圖片可以進入到導航主系統(tǒng)。代碼為:this->setToolTip("點擊進入太原理工大學導航系統(tǒng)")相應的界面如圖6-4所示:圖6-4鼠標移到圖片上提示信息顯示6.1.2子頁面布局設計主要有組合框QListWidgets、標示Qlabel、文本框QTextEdit和按鈕QpushButton這些控件。QListWidgets有兩個,用于路徑規(guī)劃功能,一個選擇起點,另外一個選擇終點。選擇完后,通過發(fā)送currentItem(int)信號把當前QListWidgets選中的行數(shù)發(fā)送到主窗體的槽函數(shù)changeitem_slot(int)和changeitemsrc(int)中完成起點與終點的設置。通過addltem()實現(xiàn)對兩個下拉框內(nèi)容的初始化。connect(src_list,SIGNAL(currentRowChanged(int)),src,SLOT(changeitem_slot(int)));connect(dest_list,SIGNAL(currentRowChanged(int)),dest,SLOT(changeitem_slot(int)));connect(src_list,SIGNAL(currentRowChanged(int)),this,SLOT(changeitemsrc(int)));connect(dest_list,SIGNAL(currentRowChanged(int)),this,SLOT(changeitemdest(int)));北京郵電大學畢業(yè)論文設計按鈕QpushButton有關閉和返回還有查詢?nèi)齻€,取消按鈕發(fā)送clicked()信號到主窗體的clickexitbtn_slot()槽函數(shù)中,選擇是否退出導航。導航主界面是在點擊開始按鈕的槽函數(shù)中實現(xiàn)的。connect(m_start_lay->m_start,SIGNAL(clicked)),this,SLOT(clickwec_slot)));voidMyWidget:clickwec_slot){m_start_lay->m_start->hide)my_graph=newmygraph;my_graph->creategraph();top=newMyShowPic;bottom=newMySelect;major->addLayout(top,15);major->addLayout(bottom,1);major->addLayout(center,1);top->addLayout(showtext,5);connect(bottom->src_list,SIGNAL(currentRowChanged(int)),top->src,SLOT(changeitem_slot(int)));my_graph->SearchAllpath(0,1);my_graph->floyed(0,1);showtext->allpath->setText(*(my_graph->all_path));showtext->shortpath->setText(*(my_graph->str));其中的MyShowPic的具體布局:MyShowPic:MyShowPic(QWidget*parent):QHBoxLayout(parent){dest->setScaledContents(true);dest->image=newQImage(":/image/2.jpg");dest->setSizePolicy(QSizePolicy::Ignored,QSizePolicy::Ignored);this->addWidget(src,7);this->addWidget(equal,1);this->addWidget(dest,7);m_path=newMyLabel;m_path->image=newQImage(":/image/11.png");this->addWidget(m_path,15);北京郵電大學畢業(yè)論文設計this->allhide();相應的導航主界面如圖6-5所示:圖6-5導航主頁面改變圖片的界面的運行結果:1.當點擊的是查詢路徑按鈕時,還有在系統(tǒng)該開始進入到導航系統(tǒng)的界面是,在中間的一個布局上,顯示的都是一個圖片,是學校的總體布局圖,在布局圖中,顯示了每個景點在學校中的位置,以便來往人員進行對照。相應的代碼實現(xiàn)是:m_path->image=newQImage(":/image/11.png");this->addWidget(m_path,15)北京郵電大學畢業(yè)論文設計結果如圖6-6所示:圖6-6點擊查詢按鈕的顯示結果2.當需要修改起始點還有終點是,則在相同的布局中,會顯示不同的圖片,會有不同的空間來顯示相應的代碼實現(xiàn)是:src->show();dest->show();equal->show();相應的運行結果如圖6-7所示:圖6-7更換起始點和終點時顯示的界面當更換查詢路徑中的起始點和終點時,具體實現(xiàn)在這章中實現(xiàn)。當換掉起點和終點時,相應的圖片也會發(fā)生變化,通過點擊起點和終點的QListWidgets來實現(xiàn)改變起點和終點的。北京郵電大學畢業(yè)論文設計connect(bottom->src_list,SIGNAL(currentRowChanged(int)),top->src,SLOT(changeitem_slot(int)));connect(bottom->sre_list,SIGNAL(currentRowChanged(int)),this,SLOT(changeitemsrc(int)));voidMyWidget::changeitemsrc(intn){m_show_fengh->clear();changeitem_slot()定義在自己實例化的label中,來改變起始點圖片的顯示:voidMyLabel:changeitem_slot(inta){{this->image=newQImage(":/image/2.jp·}更換起始點和終點的界面如圖6-8所示:博士樓圖6-8更換起始點與終點的界面北京郵電大學畢業(yè)論文設計6.1.4點擊主頁面中的查詢路徑具體實現(xiàn)當點擊導航主界面中的查詢路徑按鈕是的具體實現(xiàn):voidMyWidget::clickslt_slot)top->allhide();showtext->allshow();my_graph->all_path->clear();}點擊查詢路徑按鈕后,顯示路徑的界面如圖6-8所示:所有路徑:所有路徑:1.電機館一>行政主樓一>校門一>薄2.電機館一>行政主樓一>妻士樓4.電機館一圖書館-->行政主樓-->5.電機館一圖書館-->行政主樓->6,電機館-圖書館->機械館一>行政主樓一>校門-->博士樓7.電機館一圖書館-->機械館一>行政主樓一>博士樓學主樓一>機械館一>行政主樓一>校門一>博士樓9.電機館一圖書館-->體育館一>教學主樓一>機械館一>行政主樓一>博電機館一>博士樓圖6-8點擊查詢路徑按鈕時顯示路徑的界面當點擊查看景點詳細信息描述是,會重新實例化一個窗口,在新的窗口里查看經(jīng)典的描述信息以及改景點可以到達的所有景點的路徑信息。這個窗口的布局是:see_src->setStyleSheet("border:2pxgroovegray;border-radius:10px;padding:2px4px;");this->addWidget(mfspace,2);this->addWidget(m_c_space,3);北京郵電大學畢業(yè)論文設計當點擊導航主界面中的查看景點信息按鈕是,具體的綁定和實現(xiàn)是:connect(center->see_src,SIGNAL(clicked()),this,SLOT(clickseesrc_slot)));connect(center->see_dest,SIGNAL(clicked)),this,SLOT(clickseedest_slot)));槽函數(shù)的具體實現(xiàn)是:my_graph->all_str->clear();my_graph->do_to_all(dest_row);my_graph->M.F[dest_row].descri.append("\r\n");QPalettepalette;palette.setBrush(QPalette::Background,QBrush(*(top->src->image)));show_wid->setPalette(palette);;show_wid->setWindowTitle(my_graph->M.F[dest_row].sight);m_show_fengh->setText(my_graph->M.F[dest_row].descri.append(my_graph->all_str));}點擊查詢景點詳細信息時,會有相應的界面。如圖6-9所示:博土續(xù)博土續(xù)博士槽:從外觀上看象一個博士的帽子,故得名,是理工太學最高的一棟樓,這是線們學校的高料技樓,我們學校的網(wǎng)堵中心,我們也有一部分公共課會在這里上課2,博士橫一>行政主樓的最短路徑長度:100博士樓-->行政主樓3.博士樓-->博士樓的最短路徑長度;o博士樓-->博士樓4.博士樓一>電機館的最短路徑長度:100博士樓->電機館5.博士樓一>圖書館的最短路輕接度:150博士樓-->行政主樓-->圖書館6.博士樓-->機械館的最短路徑長度:180博士樓一>行政主樓->圖書館-->機械館7,博土樓一>體育館的最短路徑長度;5308,博士樓-數(shù)學主樓的最短路徑長度;380博士樓-->行政主樓->圖書館-->多學科綜合樓圖6-9顯示景點詳細信息的界面北京郵電大學畢業(yè)論文設計圖的創(chuàng)建用的是creategraph方法。該方法是定義在我自己定義的圖類中的。在類的頭文件《mygra

溫馨提示

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

評論

0/150

提交評論