diff --git a/python/core/auto_generated/symbology/qgsrendererregistry.sip.in b/python/core/auto_generated/symbology/qgsrendererregistry.sip.in index e1a26ab7f82..e9916acd2bc 100644 --- a/python/core/auto_generated/symbology/qgsrendererregistry.sip.in +++ b/python/core/auto_generated/symbology/qgsrendererregistry.sip.in @@ -94,7 +94,6 @@ Returns new instance of settings widget for the renderer. Returns ``None`` on er The ``oldRenderer`` argument may refer to previously used renderer (or it is ``None``). If not ``None``, it may be used to initialize GUI of the widget from the previous settings. The old renderer does not have to be of the same type as returned by createRenderer(). -When using ``oldRenderer`` make sure to make a copy of it - it will be deleted afterwards. %End virtual QgsFeatureRenderer *createRendererFromSld( QDomElement &elem, QgsWkbTypes::GeometryType geomType ) /Factory/; diff --git a/src/core/symbology/qgsrendererregistry.h b/src/core/symbology/qgsrendererregistry.h index 42e00d54854..23d450adc61 100644 --- a/src/core/symbology/qgsrendererregistry.h +++ b/src/core/symbology/qgsrendererregistry.h @@ -110,7 +110,6 @@ class CORE_EXPORT QgsRendererAbstractMetadata * The \a oldRenderer argument may refer to previously used renderer (or it is NULLPTR). * If not NULLPTR, it may be used to initialize GUI of the widget from the previous settings. * The old renderer does not have to be of the same type as returned by createRenderer(). - * When using \a oldRenderer make sure to make a copy of it - it will be deleted afterwards. */ virtual QgsRendererWidget *createRendererWidget( QgsVectorLayer *layer, QgsStyle *style, QgsFeatureRenderer *oldRenderer ) SIP_FACTORY { Q_UNUSED( layer ) Q_UNUSED( style ); Q_UNUSED( oldRenderer ); return nullptr; } diff --git a/src/gui/symbology/qgsinvertedpolygonrendererwidget.cpp b/src/gui/symbology/qgsinvertedpolygonrendererwidget.cpp index ab425aaf6e8..76ecc24bbc1 100644 --- a/src/gui/symbology/qgsinvertedpolygonrendererwidget.cpp +++ b/src/gui/symbology/qgsinvertedpolygonrendererwidget.cpp @@ -133,7 +133,8 @@ void QgsInvertedPolygonRendererWidget::mRendererComboBox_currentIndexChanged( in QgsRendererAbstractMetadata *m = QgsApplication::rendererRegistry()->rendererMetadata( rendererId ); if ( m ) { - mEmbeddedRendererWidget.reset( m->createRendererWidget( mLayer, mStyle, const_cast( mRenderer->embeddedRenderer() )->clone() ) ); + std::unique_ptr< QgsFeatureRenderer > oldRenderer( mRenderer->embeddedRenderer()->clone() ); + mEmbeddedRendererWidget.reset( m->createRendererWidget( mLayer, mStyle, oldRenderer.get() ) ); connect( mEmbeddedRendererWidget.get(), &QgsRendererWidget::widgetChanged, this, &QgsInvertedPolygonRendererWidget::widgetChanged ); mEmbeddedRendererWidget->setContext( mContext ); mEmbeddedRendererWidget->setDockMode( this->dockMode() ); diff --git a/src/gui/symbology/qgspointclusterrendererwidget.cpp b/src/gui/symbology/qgspointclusterrendererwidget.cpp index aa095de9580..26f5eb9b482 100644 --- a/src/gui/symbology/qgspointclusterrendererwidget.cpp +++ b/src/gui/symbology/qgspointclusterrendererwidget.cpp @@ -137,7 +137,8 @@ void QgsPointClusterRendererWidget::mRendererComboBox_currentIndexChanged( int i if ( m ) { // unfortunately renderer conversion is only available through the creation of a widget... - QgsRendererWidget *tempRenderWidget = m->createRendererWidget( mLayer, mStyle, mRenderer->embeddedRenderer()->clone() ); + std::unique_ptr< QgsFeatureRenderer > oldRenderer( mRenderer->embeddedRenderer()->clone() ); + QgsRendererWidget *tempRenderWidget = m->createRendererWidget( mLayer, mStyle, oldRenderer.get() ); mRenderer->setEmbeddedRenderer( tempRenderWidget->renderer()->clone() ); delete tempRenderWidget; } diff --git a/src/gui/symbology/qgspointdisplacementrendererwidget.cpp b/src/gui/symbology/qgspointdisplacementrendererwidget.cpp index e63168f0c08..edea7d7ee7e 100644 --- a/src/gui/symbology/qgspointdisplacementrendererwidget.cpp +++ b/src/gui/symbology/qgspointdisplacementrendererwidget.cpp @@ -245,7 +245,8 @@ void QgsPointDisplacementRendererWidget::mRendererComboBox_currentIndexChanged( if ( m ) { // unfortunately renderer conversion is only available through the creation of a widget... - QgsRendererWidget *tempRenderWidget = m->createRendererWidget( mLayer, mStyle, mRenderer->embeddedRenderer()->clone() ); + std::unique_ptr< QgsFeatureRenderer> oldRenderer( mRenderer->embeddedRenderer()->clone() ); + QgsRendererWidget *tempRenderWidget = m->createRendererWidget( mLayer, mStyle, oldRenderer.get() ); mRenderer->setEmbeddedRenderer( tempRenderWidget->renderer()->clone() ); delete tempRenderWidget; emit widgetChanged();