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 );

本文註定很短。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章