1  概述

临时图形Rubberband主要用于高亮显示、交互绘制等情况下。
2 原理

临时图形是在一个底色透明的图层(顶层)上,添加已有的几何元素或者创建一个几何元素(临时图形),可以设置相应的样式,并在图层的最上层叠加显示。
3 使用方法

QgsRubberBand用于显示临时图形。可以显示点、线、面等所有类型。由于在交互绘制时,可能需要高亮显示节点,所以本类也可以设置不同的IconType来显示不同的节点样式(只能在点类型时起作用)。

生成对象后可以完成操作所有的属性,如几何元素、样式等。

setWidth():设置画笔宽度。

setIconSize():设置icon的宽度(高度)。

addGeometry():添加已有的Geometry。注意:第二个参数为vectorlayer,用途是将Geometry按照此layer的crs与mapcanvas的crs进行坐标转换,如果此为NULL,则不转换。参见Qgis开发12-读取矢量元素.docx

特别要注意:mapcanvas在显示之前各种参数都不确定,一定要在mapcanvas渲染结束之后再进行坐标转换之类的操作。
示例:

//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(,,));
pRubber->setWidth();
constQgsMapToPixel*pM2PTransform=pMapCanvas->getCoordinateTransform();
QgsPointpt1=pM2PTransform->toMapCoordinates(,);
QgsPointpt2=pM2PTransform->toMapCoordinates(,);
QgsPointpt3=pM2PTransform->toMapCoordinates(,);
QgsPointpt4=pM2PTransform->toMapCoordinates(,);
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(,,));
pRubber->setWidth();
constQgsMapToPixel*pM2PTransform=pMapCanvas->getCoordinateTransform();
QgsPointpt1=pM2PTransform->toMapCoordinates(,);
QgsPointpt2=pM2PTransform->toMapCoordinates(,);
QgsPointpt3=pM2PTransform->toMapCoordinates(,);
QgsPointpt4=pM2PTransform->toMapCoordinates(,);
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(,,));
pRubber->setWidth();
pRubber->setIcon(QgsRubberBand::ICON_CROSS);
pRubber->setIconSize();
constQgsMapToPixel*pM2PTransform=pMapCanvas->getCoordinateTransform();
QgsPointpt1=pM2PTransform->toMapCoordinates(,);
pRubber->addPoint(pt1,true);
}
}

Qt+QGIS二次开发:QGIS中使用QgsRubberBand类创建临时图形的更多相关文章

  1. Qt Qgis 二次开发——鼠标点击识别矢量要素

    Qt Qgis 二次开发--鼠标点击识别矢量要素 介绍: 识别矢量要素需要用到QGis的一个工具类:QgsMapToolIdentifyFeature 一个QgsMapTool的子类的子类,官方文档描 ...

  2. Qt+QGIS二次开发:自定义类实现查询矢量数据的属性字段值(图查属性)

    在GIS领域,有两种重要的查询操作,图查属性和属性查图. 本文主要介绍如何在QGIS中通过从QgsMapToolIdentify中派生自定义类实现查询矢量数据的属性字段值(图查属性). 重点参考资料: ...

  3. Qt+QGIS二次开发:开发环境搭建(超级详细)

    原文链接: 1.qgis二次开发环境搭建(超级详细) 2.QGIS开发教程(1)——QGIS开发准备工作 3.QGIS(2.18.15 源码)+Qt(5/5.9.3)+VS2015(X64)编译

  4. Qt+QGis二次开发:加载栅格图层和矢量图层

    一.加载栅格图像 加载栅格图像的详细步骤在下面代码里: //添加栅格数据按钮槽函数 void MainWindow::addRasterlayers() { //步骤1:打开文件选择对话框 QStri ...

  5. Qt+QGis二次开发:打开S-57格式(*.000)电子海图数据,并设置多边形要素的显示风格

    不过多的废话了,直接上源码: addChartlayers()方法时“打开海图”按钮的triggered()信号所绑定的槽函数. //添加海图数据小按钮槽函数 void MainWindow::add ...

  6. Qt+QGis二次开发:矢量图层的显示样式

    原文链接:QGis二次开发基础 -- 矢量图层的显示样式

  7. Qt+QGis二次开发:创建临时图层并添加要素

    开发环境:Win10 + VS2010 + Qt 4.8.6 + QGis 2.14.4 其实本文实现的功能类似于QGis中“添加文本数据图层”的一个简化版,本文不会涉及到对话框的使用,不通过与用户互 ...

  8. Qt+Qgis二次开发:地理实体抽象

    1  概述 地理实体抽象是指点.线.面及其组合而成的,用于描述实际地物的数据结构. 其中包含几何实体和属性数据. GIS中进行几何操作,以各种实体类为基础进行操作. 在OGC中,地理实体可以由WKT表 ...

  9. 研究QGIS二次开发笔记(一)

    为了在QT程序中嵌入一个地图,最终选择了QGIS来干这件事.选型阶段真是呵呵.我折腾的是QGIS2.4.0. 首先,到官方网站下载安装QGIS.如果你跟我一样懒的话,可能希望下载一个已经编译好的win ...

随机推荐

  1. [PHP] 数据结构-循环链表的PHP实现

    1.将单链表中终端结点的指针端由空指针改为指向头结点,单循环链表,循环链表和单链表的主要差异就在于循环的判断条件上原来是判断p->next是否为空,现在则是p->next不等于头结点,则循 ...

  2. 关于Unsupported major.minor version 52.0解决办法(再次回顾)

    对于web项目的配置问题,在很大程度上,tomcat的版本问题起到很大的决定性因素,例如以上问题:Unsupported major.minor version 52.0 表示stanford par ...

  3. 关于eclipse项目的x号报错的一些问题

    有些时候项目中并未有什么问题 但项目前会有一个X号报错且无法运行项目 我们不妨从jre和Tomcat的一些配置中找原因 1,首先查看jre的安装是否正确,可以看见并未出错 ,如果有问题,重新导入一下即 ...

  4. 【Java深入研究】8、Java中Unsafe类详解

    java不能直接访问操作系统底层,而是通过本地方法来访问.Unsafe类提供了硬件级别的原子操作,主要提供了以下功能: 1.通过Unsafe类可以分配内存,可以释放内存: 类中提供的3个本地方法all ...

  5. Maven远程仓库的各种配置

    1.远程仓库的配置 在平时的开发中,我们往往不会使用默认的中央仓库,默认的中央仓库访问的速度比较慢,访问的人或许很多,有时候也无法满足我们项目的需求,可能项目需要的某些构件中央仓库中是没有的,而在其他 ...

  6. Centos7 firewalld 基本使用

    Centos7 的防火墙 firewalld比较常见 简单介绍使用 详细介绍链接推荐:   https://blog.csdn.net/buster_zr/article/details/806049 ...

  7. Python全栈学习_day001作业

    Day1作业及默写 1.简述变量命名规范 1. 必须以字母.数字.下划线命名,且不能以数字开头 2. 不能是python的关键字 3. 不能以中文或者拼音作为变量名 4. 命名格式推荐以驼峰式或者下划 ...

  8. Docker 启动遇到 Error starting daemon: Error initializing network controller 错误

    docker 版本 1.10.3 一台装有 docker 的机器重启后,没法启动,/var/log/messages 展示如下错误信息: May 17 11:11:14 gziba-hc03 syst ...

  9. 【代码笔记】Web-ionic-列表

    一,效果图. 二,index.html代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8& ...

  10. JavaScript异步和单线程

    一,同步和异步的区别: 同步会阻塞代码执行,而异步不会.(比如alert是同步,setTimeout是异步) 二,前端使用异步的场景: 1,定时任务:setTimeout,setInterval 2, ...