Qt+QGIS二次開發:QGIS中使用QgsRubberBand類建立臨時圖形

1  概述

臨時圖形Rubberband主要用於高亮顯示、交互繪製等狀況下。
2 原理

臨時圖形是在一個底色透明的圖層(頂層)上,添加已有的幾何元素或者建立一個幾何元素(臨時圖形),能夠設置相應的樣式,並在圖層的最上層疊加顯示。
3 使用方法

QgsRubberBand用於顯示臨時圖形。能夠顯示點、線、面等全部類型。因爲在交互繪製時,可能須要高亮顯示節點,因此本類也能夠設置不一樣的IconType來顯示不一樣的節點樣式(只能在點類型時起做用)。

生成對象後能夠完成操做全部的屬性,如幾何元素、樣式等。

setWidth():設置畫筆寬度。

setIconSize():設置icon的寬度(高度)。

addGeometry():添加已有的Geometry。注意:第二個參數爲vectorlayer,用途是將Geometry按照此layer的crs與mapcanvas的crs進行座標轉換,若是此爲NULL,則不轉換。參見Qgis開發12-讀取矢量元素.docx

特別要注意:mapcanvas在顯示以前各類參數都不肯定,必定要在mapcanvas渲染結束以後再進行座標轉換之類的操做。
示例:canvas

//xx.cpp
    connect(m_pMapCanvas,SIGNAL(xyCoordinates(QgsPoint)),this,SLOT(showMousePoint(QgsPoint))); /** *@briefMainWindow::initialMapCanvas * *initializewhenmapcanvaspaintfinished. *@authorsf2gis@163.com *@date2014-08-2222:31:24 */ voidMainWindow::initialMapCanvas() { createRubberBand(m_pMapCanvas); } /** *@briefMainWindow::createRubberBand * *createrubberband. *@parampMapCanvas *@authorsf2gis@163.com *@date2014-08-2222:32:30 */ voidMainWindow::createRubberBand(QgsMapCanvas*pMapCanvas) { {//line
        QgsRubberBand*pRubber=newQgsRubberBand(pMapCanvas,QGis::Line); pRubber->setColor(QColor(0,255,0)); pRubber->setWidth(2); constQgsMapToPixel*pM2PTransform=pMapCanvas->getCoordinateTransform(); QgsPointpt1=pM2PTransform->toMapCoordinates(0,0); QgsPointpt2=pM2PTransform->toMapCoordinates(100,0); QgsPointpt3=pM2PTransform->toMapCoordinates(100,100); QgsPointpt4=pM2PTransform->toMapCoordinates(0,100); pRubber->addPoint(pt1,false); pRubber->addPoint(pt2,false); pRubber->addPoint(pt3,false); pRubber->addPoint(pt4,true); } {//polygon
 QgsRubberBand*pRubber=newQgsRubberBand(pMapCanvas,QGis::Polygon); pRubber->setColor(QColor(255,0,0)); pRubber->setWidth(2); constQgsMapToPixel*pM2PTransform=pMapCanvas->getCoordinateTransform(); QgsPointpt1=pM2PTransform->toMapCoordinates(10,10); QgsPointpt2=pM2PTransform->toMapCoordinates(90,10); QgsPointpt3=pM2PTransform->toMapCoordinates(90,90); QgsPointpt4=pM2PTransform->toMapCoordinates(10,90); pRubber->addPoint(pt1,false); pRubber->addPoint(pt2,false); pRubber->addPoint(pt3,false); pRubber->addPoint(pt4,true); } {//point
        QgsRubberBand*pRubber=newQgsRubberBand(pMapCanvas,QGis::Point); pRubber->setColor(QColor(0,255,0)); pRubber->setWidth(10); pRubber->setIcon(QgsRubberBand::ICON_CROSS); pRubber->setIconSize(20); constQgsMapToPixel*pM2PTransform=pMapCanvas->getCoordinateTransform(); QgsPointpt1=pM2PTransform->toMapCoordinates(50,50); pRubber->addPoint(pt1,true); } }
相關文章
相關標籤/搜索