Skip to content
Permalink
Browse files

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
  • Loading branch information
m-kuhn committed Feb 3, 2019
1 parent 4a44306 commit 612576ca8ef9e48e4dbfe3d2140b064d6cb57b10
Showing with 9 additions and 0 deletions.
  1. +6 −0 python/core/auto_generated/geometry/qgsgeometry.sip.in
  2. +3 −0 src/core/geometry/qgsgeometry.h
@@ -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`
@@ -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()

0 comments on commit 612576c

Please sign in to comment.
You can’t perform that action at this time.