From 612576ca8ef9e48e4dbfe3d2140b064d6cb57b10 Mon Sep 17 00:00:00 2001 From: Matthias Kuhn Date: Sun, 3 Feb 2019 19:40:23 +0100 Subject: [PATCH] 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 --- python/core/auto_generated/geometry/qgsgeometry.sip.in | 6 ++++++ src/core/geometry/qgsgeometry.h | 3 +++ 2 files changed, 9 insertions(+) diff --git a/python/core/auto_generated/geometry/qgsgeometry.sip.in b/python/core/auto_generated/geometry/qgsgeometry.sip.in index 7f87553c854..a602f6d25f4 100644 --- a/python/core/auto_generated/geometry/qgsgeometry.sip.in +++ b/python/core/auto_generated/geometry/qgsgeometry.sip.in @@ -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` diff --git a/src/core/geometry/qgsgeometry.h b/src/core/geometry/qgsgeometry.h index 787801119bc..919b8103d33 100644 --- a/src/core/geometry/qgsgeometry.h +++ b/src/core/geometry/qgsgeometry.h @@ -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()