QGis二次开发基础 -- 销毁当前地图工具
2016-07-07 09:07
495 查看
本文注定很短。
由某位朋友需求,在设置了地图控件之后,怎么才能将当前的地图工具释放掉,返回原来的空地图状态。比如刚刚打开程序的时候,鼠标指针是一个箭头,表示没有地图工具,也不能在地图上直接操作。而点选某个地图工具后(例如漫游工具,鼠标指针会变成一个小手),现在想释放掉这个设置的地图工具。
这个需求我之前没有想到过,大多数时候我都是直接选择漫游工具来释放其他的地图工具。而看到这个需求我的一反应就是将 mapTool 设置为 null 就行了。但是那个朋友实验之后反馈给我说不行。于是我自己打开工程,简单拨弄了几下。
原来 QgsMapCanvas 自带的 mapTool 在初始化时,并不是null,而是没有值。
而当点选了某个工具之后,这个指针才会被创建并附上相应的值。
使用 NULL 去替换这个 mapTool 指针是不行的,因为如果不是合法的 QgsMapTool 对象,QGis会将这次替换动作忽略掉。
(截图来自 QGis 源码 qgsmapcanvas.cpp 文件)
那是不是就没办法切换回原来的无地图工具状态呢?
也不是的,QgsMapCanvas 对象提供了一个叫 unsetMapTool() 的功能,这个功能平时是不需要开发者自己调用的,因为你切换工具的时候,QGis会自动调用这个方法释放掉之前的地图工具。
所以,我们想要切换回到原来的无地图工具状态,解决思路就有了。先获取到当前的地图工具,然后 unset 掉它,并不设置新的工具,就可以了。代码如下:
本文注定很短。
由某位朋友需求,在设置了地图控件之后,怎么才能将当前的地图工具释放掉,返回原来的空地图状态。比如刚刚打开程序的时候,鼠标指针是一个箭头,表示没有地图工具,也不能在地图上直接操作。而点选某个地图工具后(例如漫游工具,鼠标指针会变成一个小手),现在想释放掉这个设置的地图工具。
这个需求我之前没有想到过,大多数时候我都是直接选择漫游工具来释放其他的地图工具。而看到这个需求我的一反应就是将 mapTool 设置为 null 就行了。但是那个朋友实验之后反馈给我说不行。于是我自己打开工程,简单拨弄了几下。
原来 QgsMapCanvas 自带的 mapTool 在初始化时,并不是null,而是没有值。
而当点选了某个工具之后,这个指针才会被创建并附上相应的值。
使用 NULL 去替换这个 mapTool 指针是不行的,因为如果不是合法的 QgsMapTool 对象,QGis会将这次替换动作忽略掉。
(截图来自 QGis 源码 qgsmapcanvas.cpp 文件)
那是不是就没办法切换回原来的无地图工具状态呢?
也不是的,QgsMapCanvas 对象提供了一个叫 unsetMapTool() 的功能,这个功能平时是不需要开发者自己调用的,因为你切换工具的时候,QGis会自动调用这个方法释放掉之前的地图工具。
所以,我们想要切换回到原来的无地图工具状态,解决思路就有了。先获取到当前的地图工具,然后 unset 掉它,并不设置新的工具,就可以了。代码如下:
QgsMapTool *lastMapTool = m_mapCanvas->mapTool(); m_mapCanvas->unsetMapTool( lastMapTool );
本文注定很短。
相关文章推荐
- 关于指针的一些事情
- C# Pointer指针应用实例简述
- C和指针小结(推荐)
- C++智能指针实例详解
- 浅谈C++指针(必看)
- C++指向函数的指针实例解析
- 关于c语言指针的两处小tip分享
- 浅谈c/c++中使用指针需要注意的问题
- 浅析iterator与指针的区别
- 探讨C++中数组名与指针的用法比较分析
- C++编程指向成员的指针以及this指针的基本使用指南
- 详解C++中的指针、数组指针与函数指针
- C++中字符串以及数组和指针的互相使用讲解
- C语言安全之数组长度与指针实例解析
- C++中指向对象的常指针与指向常对象的指针详解
- 指向变量的常指针与指向常变量的指针详细解析
- C#通过指针实现快速拷贝的方法
- 深入理解c++指针的指针和指针的引用
- php中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
- 百度地图经纬度转换到腾讯地图/Google 对应的经纬度