【《AGV調(diào)度算法設(shè)計(jì)與編寫案例分析》4200字】_第1頁(yè)
【《AGV調(diào)度算法設(shè)計(jì)與編寫案例分析》4200字】_第2頁(yè)
【《AGV調(diào)度算法設(shè)計(jì)與編寫案例分析》4200字】_第3頁(yè)
【《AGV調(diào)度算法設(shè)計(jì)與編寫案例分析》4200字】_第4頁(yè)
【《AGV調(diào)度算法設(shè)計(jì)與編寫案例分析》4200字】_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡(jiǎn)介

AGV調(diào)度算法設(shè)計(jì)與編寫案例分析目錄TOC\o"1-3"\h\u17865AGV調(diào)度算法設(shè)計(jì)與編寫案例分析 1204001.1軟件及開發(fā)環(huán)境介紹 1231301.2C++語言介紹 1300621.2.1C++語言的起源 157391.2.2C++的特點(diǎn) 2129181.3使用C++進(jìn)行系統(tǒng)設(shè)計(jì) 382541.3.1運(yùn)行C++程序的步驟 352171.3.2代碼說明 3本設(shè)計(jì)系統(tǒng)使用編程語言為C++,使用的編譯環(huán)境為QTCreator。1.1軟件及開發(fā)環(huán)境介紹QtCreator是Qt被

Nokia

收購(gòu)后推出的一款全新的輕量級(jí)集成開發(fā)環(huán)境(IDE)。此IDE能夠跨平臺(tái)運(yùn)行,支持的系統(tǒng)包括Linux(32位及64位)、MacOSX以及Windows。根據(jù)官方描述,QtCreator開發(fā)的初衷是為了使開發(fā)人員能夠利用Qt這個(gè)應(yīng)用程序框架更加快速及輕易的完成開發(fā)任務(wù)。QtCreator包括項(xiàng)目生成向?qū)А⒏呒?jí)的C++代碼編輯器、瀏覽文件及類的工具、集成了QtDesigner、QtAssistant、QtLinguist、圖形化的GDB調(diào)試前端,集成qmake構(gòu)建工具等。1.2C++語言介紹1.2.1C++語言的起源C++是一種非常流行的程序設(shè)計(jì)語言。它是一種靜態(tài)數(shù)據(jù)類型檢查的,支持多范型的通用程序設(shè)計(jì)語言。C++支持過程化程序設(shè)計(jì)、數(shù)據(jù)抽象化、面向?qū)ο蟪绦蛟O(shè)計(jì)、泛型程序設(shè)計(jì)、基于原則設(shè)計(jì)等多種程序設(shè)計(jì)風(fēng)格。C++是C語言的繼承,它既可以進(jìn)行C語言的過程化程序設(shè)計(jì),又可以進(jìn)行以抽象數(shù)據(jù)類型為特點(diǎn)的基于對(duì)象的程序設(shè)計(jì),還可以進(jìn)行以繼承和多態(tài)為特點(diǎn)的面向?qū)ο蟮某绦蛟O(shè)計(jì)。C++擅長(zhǎng)面向?qū)ο蟪绦蛟O(shè)計(jì)的同時(shí),還可以進(jìn)行基于過程的程序設(shè)計(jì),因而C++就適應(yīng)的問題規(guī)模而論,大小由之。不過,雖然C語言非常流行,但并非是完美無缺的。C語言雖然是一種高級(jí)編程語言,但又同時(shí)具備一些低級(jí)語言的特點(diǎn)。于是這就造成了C語言的存在在高級(jí)編程語言和低級(jí)編程語言之間,所以就造成了它的優(yōu)點(diǎn)和缺點(diǎn)都很突出。與低級(jí)語言(如匯編語言)相似的點(diǎn)在于,C語言程序可以直接操縱計(jì)算機(jī)的內(nèi)存。這這因素使得C語言成為系統(tǒng)程序編寫時(shí)的首選。但是在編寫其他程序時(shí),C語言不像其他高級(jí)語言那樣容易理解。另外,它不像其他高級(jí)語言那樣具有完善的自動(dòng)檢查功能。為了解決上述問題以及C語言的另一些缺陷,AT&T貝爾實(shí)驗(yàn)室的本賈尼·斯特勞斯特盧普(BjarneStroustrup)在20世紀(jì)80年代初發(fā)明了C++。他將C++設(shè)計(jì)成一種更好的C語言。C語言的很大一部分都成了C++的一個(gè)子集,所以大多數(shù)C語言程序其實(shí)也是C++程序(反之則不成立,許多C++程序都絕非C語言程序)。與C語言不同的是,C++具備了“面向?qū)ο缶幊獭保∣OP)的能力。C++不僅擁有計(jì)算機(jī)高效運(yùn)行的實(shí)用性特征,同時(shí)還致力于提高大規(guī)模程序的編程質(zhì)量與程序設(shè)計(jì)語言的問題描述能力。1.2.2C++的特點(diǎn)(1)支持?jǐn)?shù)據(jù)封裝和數(shù)據(jù)隱藏在C++中,“類”是支持?jǐn)?shù)據(jù)封裝的工具,“對(duì)象”則是數(shù)據(jù)封裝的實(shí)現(xiàn)。C++通過建立用戶定義類支持?jǐn)?shù)據(jù)封裝和數(shù)據(jù)隱藏。在面向?qū)ο蟮能浖幾g器應(yīng)用程序系統(tǒng)設(shè)計(jì)中,將該類數(shù)據(jù)和對(duì)該類的相關(guān)數(shù)據(jù)執(zhí)行信息分別進(jìn)行合法轉(zhuǎn)換運(yùn)算后將操作的兩個(gè)函數(shù)分別進(jìn)行封裝組合到一起,并以此函數(shù)作為其中一個(gè)函數(shù)類的自動(dòng)執(zhí)行定義。其中的函數(shù)對(duì)象類型說明了其是否具有某一個(gè)屬于給定函數(shù)范疇的對(duì)象類型。每一個(gè)對(duì)象給定的此類的集體對(duì)象都可能包括了此類所對(duì)象指定的若干個(gè)受到私人、公共、保護(hù)的集體成員。完好地重新定義的系統(tǒng)類一旦被重新建立,就可能會(huì)把它們用來看作不只是一個(gè)完全不被封裝的系統(tǒng)實(shí)體,可以直接用來把它作為一個(gè)系統(tǒng)整體的組成單元。類的真正內(nèi)部管理工作已經(jīng)被人們隱藏了很多起來,使用他們完善自己重新定義的這個(gè)類的工具人們不必再那么需要再去認(rèn)識(shí)和看到任何類的真正內(nèi)部管理工作,只要他們已經(jīng)能夠完全知道他們?cè)鯓硬拍苷_地看和使用它。(2)支持繼承和重用在C++現(xiàn)有類的基礎(chǔ)上可以聲明新類型,這就是繼承和重用的思想。通過繼承和重用可以更有效地組織程序結(jié)構(gòu),明確類間關(guān)系,并且充分利用已有的類來完成更復(fù)雜、深入的開發(fā)。新定義的類為子類,成為派生類。它可以從父類那里繼承所有非私有的屬性和方法,作為自己的成員。(3)支持多態(tài)性采用多態(tài)性為每個(gè)類指定表現(xiàn)行為。多態(tài)性形成由父類和它們的子類組成的一個(gè)樹型結(jié)構(gòu)。在這個(gè)樹中的每個(gè)子類可以接收一個(gè)或多個(gè)具有相同名字的消息。當(dāng)一個(gè)消息被這個(gè)樹中一個(gè)類的一個(gè)對(duì)象接收時(shí),這個(gè)對(duì)象動(dòng)態(tài)地決定給予子類對(duì)象的消息的某種用法。多態(tài)性的這一特性允許使用高級(jí)抽象。繼承性和多態(tài)性的組合,可以輕易地生成一系列雖然類似但獨(dú)一無二的對(duì)象。由于繼承性,這些對(duì)象共享許多相似的特征。由于多態(tài)性,一個(gè)對(duì)象可有獨(dú)特的表現(xiàn)方式,而另一個(gè)對(duì)象有另一種表現(xiàn)方式。1.3使用C++進(jìn)行系統(tǒng)設(shè)計(jì)1.3.1運(yùn)行C++程序的步驟(1)搭建編譯環(huán)境;(2)啟動(dòng)編譯器;(3)編輯程序文檔;(4)編譯程序;(5)對(duì)代碼進(jìn)行封裝;(6)執(zhí)行程序;1.3.2代碼說明首先進(jìn)行地圖生成,在此使用第三節(jié)所提到的柵格地圖建模法,在代碼中以二維數(shù)組來存儲(chǔ)數(shù)據(jù),代碼描述為:int_MAP[31][31]={0};生成31*31的地圖如圖4-1所示:圖4-1建立31*31模擬場(chǎng)景地圖在圖4-1程序運(yùn)行界面右側(cè),是實(shí)現(xiàn)各種功能的操作按鍵,交互方式為:使用鼠標(biāo)點(diǎn)擊按鈕,按鈕調(diào)用所鏈接的函數(shù)段,以此來實(shí)現(xiàn)按鈕上文字所描述的功能。代碼描述為:MainWindow::MainWindow(QWidget*parent):QMainWindow(parent),ui(newUi::MainWindow){ui→setupUi(this);this→setWindowTitle("AGV自動(dòng)尋路模擬");this→resize((N+9)*25,(M+9)*25);this→setFocus(Qt::MouseFocusReason);b_set=newQPushButton(this);b_set→setText("設(shè)置禁行區(qū)域");b_set→setGeometry((N+2)*25,30,150,20);b_set→setEnabled(true);agv_set=newQPushButton(this);agv_set→setText("部署agv");agv_set→setGeometry((N+2)*25,60,150,20);agv_set→setEnabled(true);tg_set=newQPushButton(this);tg_set→setText("設(shè)定目標(biāo)");tg_set→setGeometry((N+2)*25,90,150,20);tg_set→setEnabled(true);findpath=newQPushButton(this);findpath→setText("自動(dòng)尋路");findpath→setGeometry((N+2)*25,120,150,20);findpath→setEnabled(true);refresh1=newQPushButton(this);refresh1→setText("重置");refresh1→setGeometry((N+2)*25,150,150,20);refresh1→setEnabled(true);control=newQPushButton(this);control→setText("模擬設(shè)備對(duì)接");control→setGeometry((N+2)*25,180,150,20);control→setEnabled(true);yslj=newQPushButton(this);yslj→setText("預(yù)設(shè)路徑");yslj→setGeometry((N+2)*25,210,150,20);yslj→setEnabled(true);yslj_move=newQPushButton(this);yslj_move→setText("按預(yù)設(shè)路徑移動(dòng)");yslj_move→setGeometry((N+2)*25,240,150,20);yslj_move→setEnabled(true);save_lj=newQPushButton(this);save_lj→setText("使用記憶路線");save_lj→setGeometry((N+2)*25,270,150,20);save_lj→setEnabled(true);a=newAstar();last_way=NULL;connect(b_set,SIGNAL(clicked()),this,SLOT(shift_to_b_set_mode()));connect(agv_set,SIGNAL(clicked()),this,SLOT(shift_to_agv_set_mode()));connect(tg_set,SIGNAL(clicked()),this,SLOT(shift_to_tg_set_mode()));connect(findpath,SIGNAL(clicked()),this,SLOT(_findpath()));connect(refresh1,SIGNAL(clicked()),this,SLOT(ref1()));connect(control,SIGNAL(clicked()),this,SLOT(control_sim()));connect(yslj,SIGNAL(clicked()),this,SLOT(set_lj()));connect(yslj_move,SIGNAL(clicked()),this,SLOT(move_yslj()));connect(save_lj,SIGNAL(clicked()),this,SLOT(lj_save()));}每條功能語句會(huì)引用其所對(duì)應(yīng)的槽函數(shù),具體如下:(1)功能“部署AGV”,其對(duì)應(yīng)按鈕的代碼為:agv_set=newQPushButton(this);agv_set→setText("部署agv");agv_set→setGeometry((N+2)*25,60,150,20);agv_set→setEnabled(true);按鈕后鏈接的槽函數(shù)為:if(setstar)//放置AGV{painter.setBrush(QBrush(Qt::red,Qt::SolidPattern));painter.drawRect(QRect(_starx*25,(_stary+1)*25,25,25));}此段代碼實(shí)現(xiàn)了在地圖上放置一個(gè)AGV小車,并將其標(biāo)記為紅色,效果如圖4-2所示:圖4-2在模擬地圖中部署AGV小車我們給代碼加一個(gè)for循環(huán)for(autoit=m_starts.begin();it!=m_starts.end();it++)則可實(shí)現(xiàn)在地圖上布置多個(gè)AGV小車,效果如圖4-3:圖4-3在模擬地圖中部署多個(gè)AGV小車(2)功能“設(shè)定目標(biāo)”,其對(duì)應(yīng)按鈕代碼為tg_set=newQPushButton(this);tg_set→setText("設(shè)定目標(biāo)");tg_set→setGeometry((N+2)*25,90,150,20);tg_set→setEnabled(true);按鈕后鏈接的槽函數(shù)為:if(settg)//放置目標(biāo){painter.setBrush(QBrush(Qt::blue,Qt::SolidPattern));painter.drawRect(QRect(_endx*25,(_endy+1)*25,25,25));}此段代碼實(shí)現(xiàn)了在地圖上放置一個(gè)目標(biāo),并將其標(biāo)記為藍(lán)色,效果如圖4-4所示:圖4-4在模擬地圖中放置一個(gè)目標(biāo)(3)功能“設(shè)置禁行區(qū)域”,其對(duì)應(yīng)代碼為:b_set=newQPushButton(this);b_set→setText("設(shè)置禁行區(qū)域");b_set→setGeometry((N+2)*25,30,150,20);b_set→setEnabled(true);findpath=newQPushButton(this);findpath→setText("自動(dòng)尋路");findpath→setGeometry((N+2)*25,120,150,20);findpath→setEnabled(true);yslj_move=newQPushButton(this);yslj_move→setText("按預(yù)設(shè)路徑移動(dòng)");yslj_move→setGeometry((N+2)*25,240,150,20);yslj_move→setEnabled(true);switch(_MAP[i][j]){case1://畫墻壁painter.setBrush(QBrush(Qt::gray,Qt::SolidPattern));painter.drawRect(QRect(i*25,(j+1)*25,25,25));break;case0://畫通路painter.setBrush(QBrush(Qt::white,Qt::SolidPattern));painter.drawRect(QRect(i*25,(j+1)*25,25,25));break;case2://生成路徑painter.setBrush(QBrush(Qt::yellow,Qt::SolidPattern));painter.drawRect(QRect(i*25,(j+1)*25,25,25));break;case3://畫預(yù)設(shè)路徑painter.setBrush(QBrush(Qt::green,Qt::SolidPattern));painter.drawRect(QRect(i*25,(j+1)*25,25,25));break;}此段代碼包含了所有關(guān)于路徑在地圖上顯示的功能,繪制禁行區(qū)域如圖4-5示,在圖中以灰色顯示:圖4-5在地圖上繪制禁行區(qū)域在設(shè)定好“墻”,并且分別放置了AGV小車以及目標(biāo)地點(diǎn)后,選擇“自動(dòng)尋路”,即可生成以A*算法實(shí)現(xiàn)的尋找最短路徑功能。尋路成功后在地圖上使用黃色來顯示以求得的路徑,具體效果如圖4-6、4-7所示:圖4-6在地圖上顯示求得一條的路徑圖4-7在地圖上顯示求得多條路徑“預(yù)設(shè)路徑”是在不是用自動(dòng)尋路的情況下,按用戶的需求在地圖上預(yù)設(shè)一條路徑,用戶可以根據(jù)不同的運(yùn)輸情況,自由的在地圖上繪制運(yùn)行路徑,此功能在地圖上以綠色顯示自定義的路徑,具體效果如圖4-8所示:圖4-8在地圖上預(yù)設(shè)路徑以綠色顯示預(yù)設(shè)路徑繪制完畢后,點(diǎn)擊“按預(yù)設(shè)路徑移動(dòng)”按鈕,即可使AGV小車按照預(yù)設(shè)路徑運(yùn)行至目標(biāo),效果如圖4-9所示:圖4-9AGV按照預(yù)設(shè)路徑行駛至目標(biāo)(4)功能“模擬設(shè)備對(duì)接”,其對(duì)應(yīng)代碼為:control=newQPushButton(this);control→setText("模擬設(shè)備對(duì)接");control→setGeometry((N+2)*25,180,150,20);control→setEnabled(true);此功能可描述為:在AGV運(yùn)行過程中,或者AGV運(yùn)行環(huán)境較為復(fù)雜(如環(huán)境中有電梯、自動(dòng)門等)時(shí),AGV車輛會(huì)發(fā)送一個(gè)信號(hào)給上行系統(tǒng),再由上行系統(tǒng)發(fā)送開門指令給電梯/自動(dòng)門的控制系統(tǒng),以實(shí)現(xiàn)調(diào)度系統(tǒng)的通訊。由于不同的控制系統(tǒng)有不同的通信協(xié)議,因此實(shí)現(xiàn)此功能需要立足于實(shí)際的倉(cāng)儲(chǔ)環(huán)境中,因此這里只做出一個(gè)提示,如圖4-10所示圖4-10與電梯/自動(dòng)門進(jìn)行通訊時(shí)的提示(5)總結(jié)在本小節(jié)中,詳細(xì)描述和解釋了代碼所實(shí)現(xiàn)的功能以及其在圖形界面中的實(shí)現(xiàn)效果。1.3.3代碼展示(1)A*算法主程序#include"Astar.h"Astar::~Astar(){}int_MAP[31][31]={0};voidAstar::search(Node*_startPos,Node*_endPos){if(_startPos→x<0||_startPos→x>row||_startPos→y<0||_startPos→y>col||_endPos→x<0||_endPos→x>row||_endPos→y<0||_endPos→y>col)return;Node*current;startPos→changepos(_startPos→x,_startPos→y);endPos→changepos(_endPos→x,_endPos→y);openList.push_back(startPos);while(openList.size()>0){current=openList[0];if(current→x==endPos→x&¤t→y==endPos→y){//printMap();way=current;openList.clear();closeList.clear();break;}NextStep(current);closeList.push_back(current);openList.erase(openList.begin());sort(openList.begin(),openList.end(),compare);}}voidAstar::checkPoit(intx,inty,Node*father,intg){if(x<0||x>row||y<0||y>col)return;if(this→unWalk(x,y))return;if(isContains(&closeList,x,y)!=-1)return;intindex;if((index=isContains(&openList,x,y))!=-1){Node*point=openList[index];if(point→g>father→g+g){point→father=father;point→g=father→g+g;point→f=point→g+point→h;}}else{Node*point=newNode(x,y,father);countGHF(point,endPos,g);openList.push_back(point);}}voidAstar::NextStep(Node*current){checkPoit(current→x-1,current→y,current,WeightW);//左checkPoit(current→x+1,current→y,current,WeightW);//右checkPoit(current→x,current→y+1,current,WeightW);//上checkPoit(current→x,current→y-1,current,WeightW);//下if(mode){checkPoit(current→x-1,current→y+1,current,WeightWH);//左上checkPoit(current→x-1,current→y-1,current,WeightWH);//左下checkPoit(current→x+1,current→y-1,current,WeightWH);//右下checkPoit(current→x+1,current→y+1,current,WeightWH);//右上}}intAstar::isContains(vector<Node*>*Nodelist,intx,inty){for(inti=0;i<Nodelist→size();i++){if(Nodelist→at(i)→x==x&&Nodelist→at(i)→y==y){returni;}}return-1;}voidAstar::countGHF(Node*sNode,Node*eNode,intg){inth=abs(sNode→x-eNode→x)+abs(sNode→y-eNode→y)*WeightW;intcurrentg=sNode→father→g+g;intf=currentg+h;sNode→f=f;sNode→h=h;sNode→g=currentg;}boolAstar::compare(Node*n1,Node*n2){//printf("%d,%d",n1→f,n2→f);returnn1→f<n2→f;}boolAstar::unWalk(intx,inty){if(_MAP[x][y]==1)returntrue;returnfalse;}/*voidAstar::printPath(Node*current){if(current→father!=NULL)printPath(current→father);printf("(%d,%d)",current→x,current→y);}voidAstar::printMap(){for(inti=0;i<=row;i++){for(intj=0;j<=col;j++){printf("%d",map[i][j]);}printf("\n");}}*/voidNode::changepos(int_x,int_y){this→x=_x;this→y=_y;}(2)圖形化窗口程序#include"mainwindow.h"#include"ui_mainwindow.h"#include<QMessageBox>intN=31,M=31;MainWindow::MainWindow(QWidget*parent):QMainWindow(parent),ui(newUi::MainWindow){ui→setupUi(this);this→setWindowTitle("AGV自動(dòng)尋路模擬");this→resize((N+9)*25,(M+9)*25);this→setFocus(Qt::MouseFocusReason);b_set=newQPushButton(this);b_set→setText("設(shè)置禁行區(qū)域");b_set→setGeometry((N+2)*25,30,150,20);b_set→setEnabled(true);agv_set=newQPushButton(this);agv_set→setText("部署agv");agv_set→setGeometry((N+2)*25,60,150,20);agv_set→setEnabled(true);tg_set=newQPushButton(this);tg_set→setText("設(shè)定目標(biāo)");tg_set→setGeometry((N+2)*25,90,150,20);tg_set→setEnabled(true);findpath=newQPushButton(this);findpath→setText("自動(dòng)尋路");findpath→setGeometry((N+2)*25,120,150,20);findpath→setEnabled(true);refresh1=newQPushButton(this);refresh1→setText("重置");refresh1→setGeometry((N+2)*25,150,150,20);refresh1→setEnabled(true);control=newQPushButton(this);control→setText("模擬設(shè)備對(duì)接");control→setGeometry((N+2)*25,180,150,20);control→setEnabled(true);yslj=newQPushButton(this);yslj→setText("預(yù)設(shè)路徑");yslj→setGeometry((N+2)*25,210,150,20);yslj→setEnabled(true);yslj_move=newQPushButton(this);yslj_move→setText("按預(yù)設(shè)路徑移動(dòng)");yslj_move→setGeometry((N+2)*25,240,150,20);yslj_move→setEnabled(true);save_lj=newQPushButton(this);save_lj→setText("使用記憶路線");save_lj→setGeometry((N+2)*25,270,150,20);save_lj→setEnabled(true);a=newAstar();ast_way=NULL;connect(b_set,SIGNAL(clicked()),this,SLOT(shift_to_b_set_mode()));connect(agv_set,SIGNAL(clicked()),this,SLOT(shift_to_agv_set_mode()));connect(tg_set,SIGNAL(clicked()),this,SLOT(shift_to_tg_set_mode()));connect(findpath,SIGNAL(clicked()),this,SLOT(_findpath()));connect(refresh1,SIGNAL(clicked()),this,SLOT(ref1()));connect(control,SIGNAL(clicked()),this,SLOT(control_sim()));connect(yslj,SIGNAL(clicked()),this,SLOT(set_lj()));connect(yslj_move,SIGNAL(clicked()),this,SLOT(move_yslj()));connect(save_lj,SIGNAL(clicked()),this,SLOT(lj_save()));}MainWindow::~MainWindow(){deleteui;}voidMainWindow::shift_to_b_set_mode(){mode=0;update();}voidMainWindow::shift_to_agv_set_mode(){mode=1;update();}voidMainWindow::shift_to_tg_set_mode(){mode=2;update();}voidMainWindow::paintEvent(QPaintEvent*){QPainterpainter(this);painter.setPen(Qt::black);for(inti=0;i<31;i++)for(intj=0;j<31;j++){switch(_MAP[i][j]){case1://畫墻壁painter.setBrush(QBrush(Qt::gray,Qt::SolidPattern));painter.drawRect(QRect(i*25,(j+1)*25,25,25));break;case0://畫通路painter.setBrush(QBrush(Qt::white,Qt::SolidPattern));painter.drawRect(QRect(i*25,(j+1)*25,25,25));break;case2://生成路徑painter.setBrush(QBrush(Qt::yellow,Qt::SolidPattern));painter.drawRect(QRect(i*25,(j+1)*25,25,25));break;case3://畫預(yù)設(shè)路徑painter.setBrush(QBrush(Qt::green,Qt::SolidPattern));painter.drawRect(QRect(i*25,(j+1)*25,25,25));break;}if(setstar)//放置AGV{painter.setBrush(QBrush(Qt::red,Qt::SolidPattern));painter.drawRect(QRect(_starx*25,(_stary+1)*25,25,25));}if(settg)//放置目標(biāo){painter.setBrush(QBrush(Qt::blue,Qt::SolidPattern));painter.drawRect(QRect(_endx*25,(_endy+1)*25,25,25));}}}voidMainWindow::mousePressEvent(QMouseEvent*event){if(event→button()==Qt::LeftButton&&mode==0){intj=(event→y())/25-1,i=(event→x())/25;_MAP[i][j]=!_MAP[i][j];update();}if(event→button()==Qt::LeftButton&&mode==1){intj=(event→y())/25-1,i=(event→x())/25;_starx=i;_stary=j;setstar=true;update();}if(event→button()==Qt::LeftButton&&mode==2){intj=(event→y())/25-1,i=(event→x())/25;_endx=i;_endy=j;settg=true;update();

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論