Ao desenvolver um plug-in QGIS, descobri que, se nenhuma camada estiver selecionada no painel Camadas, eu posso iterar todas as camadas e fazer qualquer coisa com elas, mas "ativá-las".
Alguém poderia me dar uma dica, por favor?
Ao desenvolver um plug-in QGIS, descobri que, se nenhuma camada estiver selecionada no painel Camadas, eu posso iterar todas as camadas e fazer qualquer coisa com elas, mas "ativá-las".
Alguém poderia me dar uma dica, por favor?
Respostas:
Você pode definir a camada ativa usando o objeto qgis.utils.iface (por exemplo, QgisInterface ):
qgis.utils.iface.setActiveLayer(QgsMapLayer) # returns bool
# or
qgis.utils.iface.legendInterface().setCurrentLayer(QgsMapLayer) # returns bool
A limpeza da seleção ou da camada ativa (item sublinhado QTreeWidget no QGIS 2.0), na legenda é um pouco mais envolvida:
from PyQt4.QtCore import *
from PyQt4.QtGui import *
lg = qgis.utils.iface.mainWindow().findChild(QTreeWidget, 'theMapLegend')
lg.selectionModel().clear() # clear just selection
lg.setCurrentItem(None) # clear selection and active layer
Existem três maneiras de recuperar as camadas atuais, em relação ao que você pode querer fazer:
~ via QList <QgsMapLayer *> QgsLegendInterface :: layers ()
qgis.utils.iface.legendInterface().layers() # returns [layer, ...]
~ via QList <QgsMapLayer *> QgsMapCanvas :: layers () :
qgis.utils.iface.mapCanvas().layers() # returns [layer, ...]
~ via const QMap <QString, QgsMapLayer *> & QgsMapLayerRegistry :: mapLayers () :
QgsMapLayerRegistry.instance().mapLayers() # returns {'layer_id': layer, ...}
Consulte estas respostas para obter informações sobre as diferenças nessas coleções de camadas.