您的位置:首页 > 其它

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

2016-07-07 09:07 495 查看
本文注定很短。

由某位朋友需求,在设置了地图控件之后,怎么才能将当前的地图工具释放掉,返回原来的空地图状态。比如刚刚打开程序的时候,鼠标指针是一个箭头,表示没有地图工具,也不能在地图上直接操作。而点选某个地图工具后(例如漫游工具,鼠标指针会变成一个小手),现在想释放掉这个设置的地图工具。

这个需求我之前没有想到过,大多数时候我都是直接选择漫游工具来释放其他的地图工具。而看到这个需求我的一反应就是将 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 );


本文注定很短。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  地图 指针 qgis