QGis二次开发基础 — 销毁当前地图工具

由某位朋友需求,在设置了地图控件之后,怎么才能将当前的地图工具释放掉,返回原来的空地图状态。比如刚刚打开程序的时候,鼠标指针是一个箭头,表示没有地图工具,也不能在地图上直接操作。而点选某个地图工具后(例如漫游工具,鼠标指针会变成一个小手),现在想释放掉这个设置的地图工具。
这个需求我之前没有想到过,大多数时候我都是直接选择漫游工具来释放其他的地图工具。而看到这个需求我的一反应就是将 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 );
  •  

本文注定很短。

© 版权声明
THE END
喜欢就支持一下吧
点赞192 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容