Hi Matthias,

Thanks for your reply.
This should work better, the loop is not exited.

However, my field values are set to NULL using either changeAttributeValue(s) on vector layer or on data provider.

I tried:

vectorLayer.changeAttributeValue( f.id(), fieldIdx, QVariant(alt) )

vectorLayer.dataProvider().changeAttributeValues( {f.id(): {fieldIdx: QVariant(alt)}} )

Both return true, but changes are not written. I also tried without transforming the values to QVariant.

Do you have any hint?

Thanks,

Denis



On 03/22/2013 02:16 PM, Matthias Kuhn wrote:
Hi Denis,

On Fre 22 Mär 2013 14:10:19 CET, Denis Rouzaud wrote:
Yes exactly

             f = QgsFeature()
             iter = vectorLayer.getFeatures( QgsFeatureRequest() )
             while iter.nextFeature( f ):
                 print f.id()
                 f.setAttribute( field, QVariant( 1 ) )
                 vectorLayer.updateFeature( f )

Prints only 1 id, commenting the last line prints all ids.

On 03/22/2013 01:56 PM, Nathan Woodrow wrote:
Do you mean your loop is exited when you call updateFeature?

Can you post your code.

- Nathan


On Fri, Mar 22, 2013 at 10:54 PM, Denis Rouzaud
<[email protected] <mailto:[email protected]>> wrote:

     Hi all,

     I am looping over features of a layer using new API
     (QgsFeatureRequest).
     If I modify a feature and do: layer.updateFeature(f), my loop is
     broken.
     Is this a normal behavior?

     What should I do if I want to modify features during the loop?

     Thanks

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




_______________________________________________
Qgis-developer mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/qgis-developer
updateFeature invokes a new feature request inside, so I guess, this is
the reason for your request being closed. So in order to be able to use
this method in a loop, multiple concurrent threads should be allowed to
work on a dataprovider (which is not supported by any yet as far as I
know)

Try using changeAttributeValue / changeGeometry instead. It's faster
anyway.

Cheers,
Matthias

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

Reply via email to