Não parece haver uma maneira de encontrar diretamente a camada pai de um objeto de recurso ou se ele foi selecionado em um método na classe QgsFeature.
Uma abordagem semelhante para vlayer.selectedFeatures()é para testar se o feat.id()é no vlayer.selectedFeaturesIds(). QgsFeatureIds não são valores exclusivos em comparação com outras camadas de vetor, apenas dentro de sua própria camada.
Como alternativa, você pode começar vlayer.selectedFeatures()e iterar sobre esses recursos, em vez de todos os recursos do provedor.
Ainda outra abordagem é reunir inicialmente conjuntos (ou listas) de IDs de recursos selecionados e não selecionados para uma determinada camada vetorial:
# previous relevant code
set_selids = set(vlayer.selectedFeaturesIds())
feat = QgsFeature()
vlayer.select([], QgsRectangle(), False)
set_allids = set()
while vlayer.nextFeature(feat):
set_allids.add(feat.id())
set_notselids = set_allids - set_selids
print set_allids
print set_selids
print set_notselids
Não consigo encontrar uma única chamada para recuperar uma referência a todos os recursos (ou IDs) de uma camada vetorial (ou seja, ainda tenho que usar QgsVectorLayer.select()e iterar QgsVectorLayer.nextFeature()).
Editar : código atualizado para refletir QgsVectorLaer pode lidar com chamadas de seleção (não é necessário obter o provedor diretamente) e não atrapalha os recursos selecionados reais na tela do mapa, o que exigiria setSelectedFeatures()a atualização.
Editar 2 : depois de criar conjuntos de IDs de recursos, você pode iterar sobre eles e usar QgsVectorLayer.featureAtId(featid)para acessar o recurso.