,鼠標(biāo)拾取排序按鈕被激活。具體每一個(gè)實(shí)體對(duì)應(yīng)的一個(gè)序號(hào)的實(shí)現(xiàn)函數(shù)都是drawTextp(intx1, inty1, const QString& text),只是對(duì)于不同種類(lèi)實(shí)體調(diào)用的參數(shù)不同而已 , 例如直線: drawTextp(midPoint.x+20,midPoint.y+20,QString::number(painter->m_n Indx)),其中調(diào)用的實(shí)際參數(shù)是直線段中點(diǎn) x 坐標(biāo)+20、y 坐標(biāo)+20、實(shí)體在容器中的序號(hào)。具體手動(dòng)排序方式界面設(shè)計(jì)與實(shí)現(xiàn)將在下面每一小節(jié)中進(jìn)行具體的介紹。
(1)單個(gè)排序
單個(gè)實(shí)體排序,即一次只能對(duì)一個(gè)實(shí)體進(jìn)行排序操作。首先要進(jìn)入實(shí)體排序狀態(tài),然后選中單個(gè)實(shí)體,“單個(gè)排序”按鈕才會(huì)被激活,單擊“單個(gè)排序”按鈕,彈出單個(gè)實(shí)體排序?qū)υ捒?,選擇想要的加工序號(hào),點(diǎn)擊“OK”即可。單個(gè)實(shí)體排序操作的流程圖如圖 3.4
(3)鼠標(biāo)拾取排序
當(dāng)組成輪廓實(shí)體數(shù)量較多時(shí),此時(shí)用單個(gè)排序或列表排序都會(huì)很長(zhǎng)時(shí)間,效率不高,所以鼠標(biāo)拾取排序是就是為了簡(jiǎn)便用戶(hù)操作,提高效率而開(kāi)發(fā)的。鼠標(biāo)拾取排序操作的流程是:首先要進(jìn)入實(shí)體排序狀態(tài),然后選中需要重排實(shí)體,“鼠標(biāo)拾取排序”按鈕才會(huì)被激活,單擊“鼠標(biāo)拾取排序”按鈕,彈出鼠標(biāo)拾取排序?qū)υ捒?,?duì)話框中提示輸入開(kāi)始排序的位置,此數(shù)值小于或等于被選中的最小實(shí)體序號(hào),設(shè)置完數(shù)值點(diǎn)擊“OK”即可進(jìn)入鼠標(biāo)單擊排序中,然后單擊實(shí)體,所有需要重排的實(shí)體被單擊完后,彈出是否按照此排序排序的對(duì)話框,點(diǎn)擊“OK”即可。代碼實(shí)現(xiàn)的思路是:建立三個(gè)臨時(shí)表 QList<RS_Entity*>temple , QList<RS_Entity*>temple Entities QList<RS_Entity*>temple Entities2,通過(guò) temple 等于創(chuàng)建實(shí)體時(shí)放入的鏈表
entities 得到容器中的實(shí)體指針,遍歷鏈表 temple 中的實(shí)體指針,若實(shí)體被選中,則將實(shí)體指針放入鏈表 temple Entities 中,并將實(shí)體設(shè)置為不選中狀態(tài),然后對(duì)實(shí)體進(jìn)行單擊操作(若實(shí)體初始為不選中狀態(tài),單擊實(shí)體一次,實(shí)體由不選中狀態(tài)變成選中狀態(tài);若實(shí)體初始為選中狀態(tài),單擊實(shí)體一次,實(shí)體由選中狀態(tài)變成不選中狀態(tài),實(shí)體處于選中狀態(tài)時(shí)默認(rèn)呈虛紅線顯示,實(shí)體處于不選中狀態(tài)時(shí)默認(rèn)呈白實(shí)線顯示),實(shí)體處于選中狀態(tài),判斷實(shí)體是否處于選中狀態(tài),若是,就將實(shí)體指針加入鏈表 temple Entities2中并移除原來(lái)鏈表 temple Entities 中的實(shí)體指針,判斷是否遍歷完所有需要重排的實(shí)體指針(即鏈表
temple Entities 是否為空),若是,就遍歷鏈表 temple Entities2 中實(shí)體指針,移除鏈表 entities 中的實(shí)體指針并將鏈表 temple Entities2 中實(shí)體指針插入到鏈表entities 中。整個(gè)鼠標(biāo)拾取排序操作的流程圖如圖 3.12 所示,鼠標(biāo)拾取排序前后的效果圖分別如圖 3.13 和圖 3.14 所示,代碼實(shí)現(xiàn)的流程圖如圖 3.15 所示。