레이어에서 기능 삭제 이벤트에 대한 신호 설정이 있습니다.
self.layer.featureDeleted.connect(self.feature_deleted)
슬롯의 삭제 된 피처에서 속성을 가져 오려고하면 StopIteration 오류가 발생합니다 (즉, 피처를 검색 할 수 없음).
레이어 변경 사항이 커밋되기 전에 삭제 된 기능에서 속성을 검색 할 수 있어야한다고 생각 했습니까? 그렇지 않으면 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]
레이어 변경 사항이 커밋되기 전에 삭제 된 기능의 특성에 어떻게 액세스 할 수 있습니까?
1
삭제 된 기능은 레이어의 원래 버전을 제외하고는 어디에도 저장되지 않은 것 같습니다 ... 그래서 ... 두 번 연 다음 수정하는 레이어 의 편집 버퍼 에서 반환 된 deletedFeatureIds 를 사용할 수 있습니까? 속성 값 변경 또는 지오메트리 변경 사항 만 저장됩니다 ... 삭제 된 피처는 아닙니다 (해당 featureId 만 있습니다)
—
snaileater
@ snaileater 내 경우에는 레이어를 복사하는 것이 비용이 많이 드는 작업입니다. 선택한 기능의 속성을 기록하고 변경 사항이 적용되면 남은 속성과 비교합니다.
—
Matt
@Matt 메일 링리스트에이 포스팅이 도움이 될 것입니다 : lists.osgeo.org/pipermail/qgis-developer/2015-May/037823.html
—
eftas