Deprecate QgsGeometry::set for usage in Python

When a new QgsAbstractGeometry is set on a geometry object, the previous child is deleted.
If the previous object was constructed by Python, it's wrapper will still be alive for
as long as the QgsGeometry is alive. If a new QgsAbstractGeometry is constructed at the same
memory address as the old one, the wrapper will be reused with wrong type (and other)
information, leading to all kind of weird issues.

See also https://www.riverbankcomputing.com/pipermail/pyqt/2019-January/041251.html
This commit is contained in:
Matthias Kuhn 2019-02-03 19:40:23 +01:00
parent 4a44306700
commit 612576ca8e
No known key found for this signature in database
GPG Key ID: 7A7F1A1C90C3E6A7
2 changed files with 9 additions and 0 deletions

View File

@ -133,6 +133,12 @@ Sets the underlying geometry store. Ownership of geometry is transferred.
In QGIS 2.x this method was named setGeometry().
.. note::
This method is deprecated for usage in Python and will be removed from Python bindings with QGIS 4.
Using this method will confuse Python's memory management and type information system.
Better create a new QgsGeometry object instead.
.. seealso:: :py:func:`get`
.. seealso:: :py:func:`constGet`

View File

@ -196,6 +196,9 @@ class CORE_EXPORT QgsGeometry
* Sets the underlying geometry store. Ownership of geometry is transferred.
*
* \note In QGIS 2.x this method was named setGeometry().
* \note This method is deprecated for usage in Python and will be removed from Python bindings with QGIS 4.
* Using this method will confuse Python's memory management and type information system.
* Better create a new QgsGeometry object instead.
*
* \see get()
* \see constGet()