QGis二次開發基礎 -- 銷燬當前地圖工具
阿新 • • 發佈:2019-01-22
本文註定很短。
由某位朋友需求,在設定了地圖控制元件之後,怎麼才能將當前的地圖工具釋放掉,返回原來的空地圖狀態。比如剛剛開啟程式的時候,滑鼠指標是一個箭頭,表示沒有地圖工具,也不能在地圖上直接操作。而點選某個地圖工具後(例如漫遊工具,滑鼠指標會變成一個小手),現在想釋放掉這個設定的地圖工具。
這個需求我之前沒有想到過,大多數時候我都是直接選擇漫遊工具來釋放其他的地圖工具。而看到這個需求我的一反應就是將 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 );
本文註定很短。