Non sembra esserci un modo per trovare direttamente il livello padre di un oggetto funzione o se è selezionato da un metodo nella classe QgsFeature.
Un approccio simile vlayer.selectedFeatures()è testare se feat.id()è presente vlayer.selectedFeaturesIds(). QgsFeatureIds non sono valori univoci rispetto ad altri livelli vettoriali, ma solo all'interno del proprio livello.
In alternativa, è possibile iniziare vlayer.selectedFeatures()e scorrere su tali funzionalità, anziché su tutte le funzionalità del provider.
Ancora un altro approccio è quello di raccogliere inizialmente insiemi (o elenchi) di ID di funzionalità selezionati e non selezionati per un dato livello vettoriale:
# 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
Non riesco a trovare una singola chiamata per recuperare un riferimento a tutte le funzionalità (o ID) per un livello vettoriale (cioè devo ancora usare QgsVectorLayer.select()e iterare con QgsVectorLayer.nextFeature()).
Modifica : il codice aggiornato per riflettere QgsVectorLaer può gestire la chiamata selezionata (non è necessario ottenere direttamente il provider) e non confonde le effettive funzioni selezionate nell'area della mappa, che richiederebbe setSelectedFeatures()l'aggiornamento.
Modifica 2 : dopo aver creato i set di ID funzionalità, è possibile scorrere su di essi e utilizzare QgsVectorLayer.featureAtId(featid)per accedere alla funzione.