ฉันมีการตั้งค่าสัญญาณสำหรับเหตุการณ์การลบคุณสมบัติในเลเยอร์:
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
ดูเหมือนว่าฟีเจอร์ที่ถูกลบจะไม่ถูกเก็บไว้ที่ใดเลย ... ยกเว้นในเวอร์ชันดั้งเดิมของเลเยอร์ของคุณ ... ดังนั้น ... อาจเปิดได้สองครั้งจากนั้นใช้deleteFeatureIds ที่ส่งคืนโดยบัฟเฟอร์การแก้ไขของเลเยอร์ที่คุณกำลังแก้ไขอยู่หรือไม่ ฉันพบว่าการเปลี่ยนแปลงค่าแอตทริบิวต์หรือการเปลี่ยนแปลงรูปทรงเรขาคณิตจะถูกเก็บไว้ ... ไม่ถูกลบออกจากคุณลักษณะ (เฉพาะ featureIds ของพวกเขา ... )
—
snaileater
@snaileater การคัดลอกเลเยอร์จะเป็นการดำเนินการที่แพงในกรณีของฉัน ฉันจะลองและบันทึกคุณสมบัติของคุณสมบัติตามที่เลือกไว้และเปรียบเทียบกับคุณลักษณะที่เหลือเมื่อทำการเปลี่ยนแปลง
—
แมตต์
@Matt บางทีการโพสต์ในรายชื่อผู้รับจดหมายอาจช่วยได้: lists.osgeo.org/pipermail/qgis-developer/2015-May/037823.html
—
eftas