Hi Martin,
i try to implement a solution without QTimer patch.
Can you tell me if it could be work properly:

1- layer.undoStack().indexChanged.connect(self.undoStackChanged) -- get the 
signal from undo stack 
2-  layer.featureAdded.connect(self.setFeatureId) --get signal of feature added
3- def setFeatureId(self,feat_id):
       ##get the feature id added
        self.feat_id = feat_id
 4-  def undoStackChanged(self,id): ### check the command from undo stack (if 
it is a add feature command) . If it is a dd feature command run my 
added_Feature function (that i bound in my previous code with featureAdded 
signal) passing the feature id already added
        command = self.activeLayer.undoStack().command(id-1)
        if command and command.actionText() == 'add feature':

            self.handlelayerobject.added_Feature(self.feat_id)


I checked that feature added event is trigger before addind new command to undo 
stack. Is it true?
Do you think that is is a solution?


Thanks


Francesco



----Messaggio originale----

Da: [email protected]

Data: 16/03/2015 5.19

A: "[email protected]"<[email protected]>

Cc: "qgis-dev"<[email protected]>

Ogg: Re: [Qgis-developer] wrapping changeAttributeValue between begin and end 
EditCommand



Hi Francesco
Currently it is not safe to do calls that modify vector layer data in slots 
connected to signals notifying about data change (such as featureAdded). The 
issue is that at the point when those signals are emitted, their underlying 
undo commands were not yet pushed onto the stack, so doing further editing 
calls causes corruption of undo stack (undo command for follow up operation is 
placed before the first operation).
As a workaround you could defer the change attribute operations - e.g. with a 
QTimer. Not an elegant solution though...
RegardsMartin

On Sun, Mar 15, 2015 at 9:04 PM, [email protected] 
<[email protected]> wrote:


Hi all,
i have a problem with beginEditCommand and endEditCommand wrapping.
In my plugin i capture the layer.featureAdded signal :
self.layer.featureAdded.connect(self.myfunction)
 The scope of my function is to change attribute of the feature added according 
with some rules.
I wrap self.layer.changeAttributevalue between self.layer.beginEditCommand('My 
custom value') and self.layer.endEditCommand() but when i added a feature i 
can't see in Undo/redo window the label My custom value but my value is changed.
This cause a Qgis 2.8.2 crash when i try to rollback my changes.

P.S If i comment my change values function and i write the code in a python 
console i can see  my beginEditCommand label and no crash happend.

Anyone can help me?

Thanks

Francesco


_______________________________________________

Qgis-developer mailing list

[email protected]

http://lists.osgeo.org/mailman/listinfo/qgis-developer






_______________________________________________
Qgis-developer mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/qgis-developer

Reply via email to