QGis二次开发基础 -- 销毁当前地图工具
来源:互联网 发布:淘宝商品上架教程 编辑:程序博客网 时间:2024/05/17 22:02
本文注定很短。
由某位朋友需求,在设置了地图控件之后,怎么才能将当前的地图工具释放掉,返回原来的空地图状态。比如刚刚打开程序的时候,鼠标指针是一个箭头,表示没有地图工具,也不能在地图上直接操作。而点选某个地图工具后(例如漫游工具,鼠标指针会变成一个小手),现在想释放掉这个设置的地图工具。
这个需求我之前没有想到过,大多数时候我都是直接选择漫游工具来释放其他的地图工具。而看到这个需求我的一反应就是将 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 );
本文注定很短。
0 0
- QGis二次开发基础 -- 销毁当前地图工具
- QGis二次开发基础 -- 添加在线地图服务
- QGis二次开发基础 -- 添加在线地图服务
- QGis二次开发基础 -- 属性识别工具的实现
- QGis二次开发基础 -- 属性识别工具的实现
- QGis 二次开发基础 -- 显示数据
- QGis二次开发基础 -- 属性表格
- QGis二次开发基础 -- 文字标注
- QGis 二次开发基础 -- 显示数据
- QGis二次开发基础 -- 属性表格
- QGis二次开发基础 -- 构建图层管理器
- QGis二次开发基础 -- 图标不显示问题
- QGis二次开发基础 -- 栅格图像增强显示
- QGis二次开发基础 -- 根据属性查询要素
- QGis二次开发基础 -- 添加矢量要素功能
- QGis二次开发基础 -- 构建图层管理器
- QGis二次开发基础 -- 栅格图像增强显示
- QGis二次开发基础 -- 根据属性查询要素
- Android开机时间分析
- Android 实现广告无限循环
- Codeforces Round #361 (Div. 2) B. Mike and Shortcuts
- Mat result=img1.clone(); cv::add(img1,img2,result,mask);
- angularjs-工具方法整理
- QGis二次开发基础 -- 销毁当前地图工具
- Android二维码解析和生成(菜鸟的福利来了,70多行代码实现)
- 学习笔记之内存管理
- 链表
- C++ typedef用法小结
- google switchysharp
- HTML的文本设置
- 安卓手机性能测试方法
- 局域网