No parece haber una manera de encontrar directamente la capa primaria de un objeto de entidad o si está seleccionada de un método en la clase QgsFeature.
Un enfoque similar a vlayer.selectedFeatures()es probar si feat.id()está dentro vlayer.selectedFeaturesIds(). QgsFeatureIds no son valores únicos en comparación con otras capas vectoriales, solo dentro de su propia capa.
Alternativamente, puede comenzar vlayer.selectedFeatures()e iterar sobre esas características, en lugar de todas las características del proveedor.
Otro enfoque es reunir inicialmente conjuntos (o listas) de identificadores de entidad seleccionados y no seleccionados para una capa vectorial dada:
# 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
Parece que no puedo encontrar una sola llamada para recuperar una referencia a todas las características (o identificadores) para una capa vectorial (es decir, todavía tengo que usar QgsVectorLayer.select()e iterar con QgsVectorLayer.nextFeature()).
Editar : el código actualizado para reflejar QgsVectorLaer puede manejar llamadas de selección (no es necesario obtener el proveedor directamente), y no estropea las funciones seleccionadas reales en el lienzo del mapa, lo que requeriría setSelectedFeatures()una actualización.
Edición 2 : después de crear conjuntos de ID de características, puede iterar sobre ellos y usarlos QgsVectorLayer.featureAtId(featid)para acceder a la característica.