Suite

Comment accéder à des attributs de fonctionnalités supprimés (avant de valider)

Comment accéder à des attributs de fonctionnalités supprimés (avant de valider)


J'ai une configuration de signal pour un événement de suppression d'entité sur une couche :

self.layer.featureDeleted.connect(self.feature_deleted)

Lorsque j'essaie de récupérer un attribut de la fonction supprimée sur l'emplacement, un Arrêter l'itération une erreur est renvoyée (c'est-à-dire qu'il ne peut pas récupérer la fonctionnalité).

J'aurais pensé que je devrais toujours pouvoir récupérer les attributs d'une entité supprimée avant que les modifications apportées à la couche ne soient validées ? Sinon, je ne vois pas à quoi sert le paramètre fid.

def feature_deleted(self, fid): feature = self.layer.getFeatures(QgsFeatureRequest().setFilterFid(int(fid))).next() idx = self.layer.fieldNameIndex('my_attribute') print feature.attributes() [idx]

Comment puis-je accéder aux attributs d'une entité supprimée (avant que les modifications apportées à la couche ne soient validées) ?


Il y aurait deux moments où vous pouvez toujours obtenir des fonctionnalités qui doivent être supprimées :

  1. Lorsque vous les supprimez dans une session d'édition mais que vous n'avez pas validé ou enregistré les modifications (c'est-à-dire que vous pouvez toujours revenir en arrière).

    layer = iface.activeLayer() idx = layer.fieldNameIndex( 'my_attribute' ) def feature_deleted( fid ): feature = layer.dataProvider().getFeatures( QgsFeatureRequest( fid ) ).next() print feature.id(), feature .attributes()[idx] layer.featureDeleted.connect( feature_deleted )
  2. Juste avant que les fonctionnalités supprimées ne soient validées (c'est-à-dire que vous venez de cliquer sur leEnregistrer les modifications de calquebouton ou vous venez d'appelerlayer.commitChanges()).

    layer = iface.activeLayer() idx = layer.fieldNameIndex( 'my_attribute' ) def features_deleted(): if layer.editBuffer(): ids = layer.editBuffer().deletedFeatureIds() pour l'entité dans layer.dataProvider().getFeatures ( QgsFeatureRequest().setFilterFids( ids ) ): print feature.id(), feature.attributes()[idx] layer.beforeCommitChanges.connect( features_deleted )