Saya sedang mengembangkan addon untuk QGIS yang perlu menetapkan UUID untuk fitur apa pun segera setelah ditambahkan ke layer. Saya menggunakan sinyal fiturAdded untuk menulis UUID di bidang fitur yang sesuai.
Ini adalah kode yang saya gunakan (sesederhana mungkin):
def run(self):
self.iface.mapCanvas().currentLayer().featureAdded.connect(self.onFeatureAdded)
def onFeatureAdded(self, fid):
layer = self.iface.mapCanvas().currentLayer()
layer.beginEditCommand("Set UUID")
print layer.changeAttributeValue(fid, layer.fieldNameIndex('guid_pol'), 'some_random_uuid') # prints True
layer.endEditCommand()
(Saya membuat plugin baru dengan add-on 'Plugin Builder' dan di atas adalah satu-satunya kode yang telah saya tambahkan padanya .)
Kecuali jika saya melewatkan sesuatu, ini mengikuti pedoman dari dokumentasi dalam buku masak pengembang QGIS : http://docs.qgis.org/testing/en/docs/pyqgis_developer_cookbook/vector.html#modifying-vector-layers-with- an-editing-buffer
Ketika saya mengedit layer, jika saya menambahkan fitur, bidang 'guid_pol' diatur ke 'some_random_uuid' seperti yang diharapkan. Saya dapat melakukan perubahan tanpa masalah, namun, alih-alih melakukan perubahan, saya mencoba membatalkannya QGIS lumpuh dengan kesalahan 0xC0000005 (Pelanggaran Akses) .
Menariknya, perintah 'Set UUID' tidak ditambahkan ke undo / redo stack (setidaknya, bukan ke Undo / redo Panel ) dan jika saya mencoba untuk membatalkannya crash juga .
Saya menggunakan QGIS 2.14 tetapi saya mengamati perilaku yang sama dengan QGIS 2.12.
Saya mengalami kesulitan mendapatkan ini berfungsi. Apakah ada yang salah yang saya lakukan?
sumber