Skip to content

Commit f7f43e0

Browse files
committedMay 26, 2021
Fix memory leaks in renderer widgets
1 parent 7a8f35f commit f7f43e0

25 files changed

+55
-45
lines changed
 

‎python/gui/auto_generated/symbology/qgs25drendererwidget.sip.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ Constructor
3333
:param style:
3434
:param renderer: the mask renderer (will not take ownership)
3535
%End
36+
~Qgs25DRendererWidget();
3637

3738
virtual QgsFeatureRenderer *renderer();
3839

‎python/gui/auto_generated/symbology/qgsembeddedsymbolrendererwidget.sip.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ Constructor
3838
:param style:
3939
:param renderer: the merged feature renderer (will not take ownership)
4040
%End
41+
~QgsEmbeddedSymbolRendererWidget();
4142

4243
virtual QgsFeatureRenderer *renderer();
4344

‎python/gui/auto_generated/symbology/qgsheatmaprendererwidget.sip.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ Constructor
3333
:param style:
3434
:param renderer: the mask renderer (will not take ownership)
3535
%End
36+
~QgsHeatmapRendererWidget();
3637

3738
virtual QgsFeatureRenderer *renderer();
3839

‎python/gui/auto_generated/symbology/qgsinvertedpolygonrendererwidget.sip.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ Constructor
3838
:param style:
3939
:param renderer: the mask renderer (will not take ownership)
4040
%End
41+
~QgsInvertedPolygonRendererWidget();
4142

4243
virtual QgsFeatureRenderer *renderer();
4344

‎python/gui/auto_generated/symbology/qgsmergedfeaturerendererwidget.sip.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ Constructor
3838
:param style:
3939
:param renderer: the merged feature renderer (will not take ownership)
4040
%End
41+
~QgsMergedFeatureRendererWidget();
4142

4243
virtual QgsFeatureRenderer *renderer();
4344

‎src/gui/symbology/qgs25drendererwidget.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "qgsvectorlayer.h"
1919
#include "qgsmaplayerstylemanager.h"
2020
#include "qgsexpressioncontextutils.h"
21+
#include "qgssymbol.h"
2122

2223
Qgs25DRendererWidget::Qgs25DRendererWidget( QgsVectorLayer *layer, QgsStyle *style, QgsFeatureRenderer *renderer )
2324
: QgsRendererWidget( layer, style )
@@ -54,7 +55,7 @@ Qgs25DRendererWidget::Qgs25DRendererWidget( QgsVectorLayer *layer, QgsStyle *sty
5455

5556
if ( renderer )
5657
{
57-
mRenderer = Qgs25DRenderer::convertFromRenderer( renderer );
58+
mRenderer.reset( Qgs25DRenderer::convertFromRenderer( renderer ) );
5859
}
5960

6061
mHeightWidget->setLayer( layer );
@@ -85,9 +86,11 @@ Qgs25DRendererWidget::Qgs25DRendererWidget( QgsVectorLayer *layer, QgsStyle *sty
8586
connect( mWallExpositionShading, &QAbstractButton::toggled, this, &Qgs25DRendererWidget::updateRenderer );
8687
}
8788

89+
Qgs25DRendererWidget::~Qgs25DRendererWidget() = default;
90+
8891
QgsFeatureRenderer *Qgs25DRendererWidget::renderer()
8992
{
90-
return mRenderer;
93+
return mRenderer.get();
9194
}
9295

9396
void Qgs25DRendererWidget::updateRenderer()

‎src/gui/symbology/qgs25drendererwidget.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ class GUI_EXPORT Qgs25DRendererWidget : public QgsRendererWidget, protected Ui::
4848
* \param renderer the mask renderer (will not take ownership)
4949
*/
5050
Qgs25DRendererWidget( QgsVectorLayer *layer, QgsStyle *style, QgsFeatureRenderer *renderer SIP_TRANSFER );
51+
~Qgs25DRendererWidget() override;
5152

5253
QgsFeatureRenderer *renderer() override;
5354

@@ -57,7 +58,7 @@ class GUI_EXPORT Qgs25DRendererWidget : public QgsRendererWidget, protected Ui::
5758
private:
5859
void apply() override SIP_FORCE;
5960

60-
Qgs25DRenderer *mRenderer = nullptr;
61+
std::unique_ptr< Qgs25DRenderer > mRenderer;
6162

6263
friend class QgsAppScreenShots;
6364
};

‎src/gui/symbology/qgsembeddedsymbolrendererwidget.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ QgsEmbeddedSymbolRendererWidget::QgsEmbeddedSymbolRendererWidget( QgsVectorLayer
7979
} );
8080
}
8181

82+
QgsEmbeddedSymbolRendererWidget::~QgsEmbeddedSymbolRendererWidget() = default;
83+
8284
QgsFeatureRenderer *QgsEmbeddedSymbolRendererWidget::renderer()
8385
{
8486
return mRenderer.get();

‎src/gui/symbology/qgsembeddedsymbolrendererwidget.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@
1717

1818
#include "ui_qgsembeddedsymbolrendererwidgetbase.h"
1919
#include "qgis_sip.h"
20-
#include "qgsembeddedsymbolrenderer.h"
2120
#include "qgsrendererwidget.h"
2221
#include "qgis_gui.h"
2322

2423
class QMenu;
24+
class QgsEmbeddedSymbolRenderer;
2525

2626
/**
2727
* \ingroup gui
@@ -50,6 +50,7 @@ class GUI_EXPORT QgsEmbeddedSymbolRendererWidget : public QgsRendererWidget, pub
5050
* \param renderer the merged feature renderer (will not take ownership)
5151
*/
5252
QgsEmbeddedSymbolRendererWidget( QgsVectorLayer *layer, QgsStyle *style, QgsFeatureRenderer *renderer );
53+
~QgsEmbeddedSymbolRendererWidget() override;
5354

5455
QgsFeatureRenderer *renderer() override;
5556
void setContext( const QgsSymbolWidgetContext &context ) override;

‎src/gui/symbology/qgsgraduatedsymbolrendererwidget.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -464,7 +464,7 @@ QgsGraduatedSymbolRendererWidget::QgsGraduatedSymbolRendererWidget( QgsVectorLay
464464
// setup user interface
465465
setupUi( this );
466466

467-
mSymmetryPointValidator = new QDoubleValidator();
467+
mSymmetryPointValidator = new QDoubleValidator( this );
468468
cboSymmetryPoint->setEditable( true );
469469
cboSymmetryPoint->setValidator( mSymmetryPointValidator );
470470

‎src/gui/symbology/qgsgraduatedsymbolrendererwidget.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ class GUI_EXPORT QgsGraduatedSymbolRendererWidget : public QgsRendererWidget, pr
196196

197197
QgsRangeList mCopyBuffer;
198198

199-
QDoubleValidator *mSymmetryPointValidator;
199+
QDoubleValidator *mSymmetryPointValidator = nullptr;
200200

201201
std::vector< std::unique_ptr< QgsAbstractProcessingParameterWidgetWrapper >> mParameterWidgetWrappers;
202202
};

‎src/gui/symbology/qgsheatmaprendererwidget.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,11 +105,11 @@ QgsHeatmapRendererWidget::QgsHeatmapRendererWidget( QgsVectorLayer *layer, QgsSt
105105

106106
if ( renderer )
107107
{
108-
mRenderer = QgsHeatmapRenderer::convertFromRenderer( renderer );
108+
mRenderer.reset( QgsHeatmapRenderer::convertFromRenderer( renderer ) );
109109
}
110110
if ( !mRenderer )
111111
{
112-
mRenderer = new QgsHeatmapRenderer();
112+
mRenderer = std::make_unique< QgsHeatmapRenderer >();
113113
}
114114

115115
btnColorRamp->setShowGradientOnly( true );
@@ -141,9 +141,11 @@ QgsHeatmapRendererWidget::QgsHeatmapRendererWidget( QgsVectorLayer *layer, QgsSt
141141
connect( mWeightExpressionWidget, static_cast < void ( QgsFieldExpressionWidget::* )( const QString & ) >( &QgsFieldExpressionWidget::fieldChanged ), this, &QgsHeatmapRendererWidget::weightExpressionChanged );
142142
}
143143

144+
QgsHeatmapRendererWidget::~QgsHeatmapRendererWidget() = default;
145+
144146
QgsFeatureRenderer *QgsHeatmapRendererWidget::renderer()
145147
{
146-
return mRenderer;
148+
return mRenderer.get();
147149
}
148150

149151
void QgsHeatmapRendererWidget::setContext( const QgsSymbolWidgetContext &context )

‎src/gui/symbology/qgsheatmaprendererwidget.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,13 @@ class GUI_EXPORT QgsHeatmapRendererWidget : public QgsRendererWidget, private Ui
4848
* \param renderer the mask renderer (will not take ownership)
4949
*/
5050
QgsHeatmapRendererWidget( QgsVectorLayer *layer, QgsStyle *style, QgsFeatureRenderer *renderer );
51+
~QgsHeatmapRendererWidget() override;
5152

5253
QgsFeatureRenderer *renderer() override;
5354
void setContext( const QgsSymbolWidgetContext &context ) override;
5455

5556
private:
56-
QgsHeatmapRenderer *mRenderer = nullptr;
57+
std::unique_ptr< QgsHeatmapRenderer > mRenderer;
5758

5859
QgsExpressionContext createExpressionContext() const override;
5960

‎src/gui/symbology/qgsinvertedpolygonrendererwidget.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ QgsInvertedPolygonRendererWidget::QgsInvertedPolygonRendererWidget( QgsVectorLay
100100
}
101101
}
102102

103+
QgsInvertedPolygonRendererWidget::~QgsInvertedPolygonRendererWidget() = default;
104+
103105
QgsFeatureRenderer *QgsInvertedPolygonRendererWidget::renderer()
104106
{
105107
if ( mRenderer && mEmbeddedRendererWidget )

‎src/gui/symbology/qgsinvertedpolygonrendererwidget.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@
1717

1818
#include "ui_qgsinvertedpolygonrendererwidgetbase.h"
1919
#include "qgis_sip.h"
20-
#include "qgsinvertedpolygonrenderer.h"
2120
#include "qgsrendererwidget.h"
2221
#include "qgis_gui.h"
2322

2423
class QMenu;
24+
class QgsInvertedPolygonRenderer;
2525

2626
/**
2727
* \ingroup gui
@@ -50,6 +50,7 @@ class GUI_EXPORT QgsInvertedPolygonRendererWidget : public QgsRendererWidget, pr
5050
* \param renderer the mask renderer (will not take ownership)
5151
*/
5252
QgsInvertedPolygonRendererWidget( QgsVectorLayer *layer, QgsStyle *style, QgsFeatureRenderer *renderer );
53+
~QgsInvertedPolygonRendererWidget() override;
5354

5455
QgsFeatureRenderer *renderer() override;
5556

‎src/gui/symbology/qgsmergedfeaturerendererwidget.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ QgsMergedFeatureRendererWidget::QgsMergedFeatureRendererWidget( QgsVectorLayer *
9797
}
9898
}
9999

100+
QgsMergedFeatureRendererWidget::~QgsMergedFeatureRendererWidget() = default;
101+
100102
QgsFeatureRenderer *QgsMergedFeatureRendererWidget::renderer()
101103
{
102104
if ( mRenderer && mEmbeddedRendererWidget )

‎src/gui/symbology/qgsmergedfeaturerendererwidget.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@
1717

1818
#include "ui_qgsmergedfeaturerendererwidgetbase.h"
1919
#include "qgis_sip.h"
20-
#include "qgsmergedfeaturerenderer.h"
2120
#include "qgsrendererwidget.h"
2221
#include "qgis_gui.h"
2322

2423
class QMenu;
24+
class QgsMergedFeatureRenderer;
2525

2626
/**
2727
* \ingroup gui
@@ -50,6 +50,7 @@ class GUI_EXPORT QgsMergedFeatureRendererWidget : public QgsRendererWidget, priv
5050
* \param renderer the merged feature renderer (will not take ownership)
5151
*/
5252
QgsMergedFeatureRendererWidget( QgsVectorLayer *layer, QgsStyle *style, QgsFeatureRenderer *renderer );
53+
~QgsMergedFeatureRendererWidget() override;
5354

5455
QgsFeatureRenderer *renderer() override;
5556
void setContext( const QgsSymbolWidgetContext &context ) override;

‎src/gui/symbology/qgsnullsymbolrendererwidget.cpp

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,28 +26,24 @@ QgsRendererWidget *QgsNullSymbolRendererWidget::create( QgsVectorLayer *layer, Q
2626

2727
QgsNullSymbolRendererWidget::QgsNullSymbolRendererWidget( QgsVectorLayer *layer, QgsStyle *style, QgsFeatureRenderer *renderer )
2828
: QgsRendererWidget( layer, style )
29-
3029
{
3130
if ( renderer )
3231
{
33-
mRenderer = QgsNullSymbolRenderer::convertFromRenderer( renderer );
32+
mRenderer.reset( QgsNullSymbolRenderer::convertFromRenderer( renderer ) );
3433
}
3534
if ( !mRenderer )
3635
{
37-
mRenderer = new QgsNullSymbolRenderer();
36+
mRenderer = std::make_unique< QgsNullSymbolRenderer >();
3837
}
3938

4039
QGridLayout *layout = new QGridLayout( this );
4140
QLabel *label = new QLabel( tr( "No symbols will be rendered for features in this layer." ) );
4241
layout->addWidget( label );
4342
}
4443

45-
QgsNullSymbolRendererWidget::~QgsNullSymbolRendererWidget()
46-
{
47-
delete mRenderer;
48-
}
44+
QgsNullSymbolRendererWidget::~QgsNullSymbolRendererWidget() = default;
4945

5046
QgsFeatureRenderer *QgsNullSymbolRendererWidget::renderer()
5147
{
52-
return mRenderer;
48+
return mRenderer.get();
5349
}

‎src/gui/symbology/qgsnullsymbolrendererwidget.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class GUI_EXPORT QgsNullSymbolRendererWidget : public QgsRendererWidget
4949
protected:
5050

5151
//! Renderer being configured by the widget
52-
QgsNullSymbolRenderer *mRenderer = nullptr;
52+
std::unique_ptr< QgsNullSymbolRenderer > mRenderer;
5353

5454
};
5555

‎src/gui/symbology/qgspointclusterrendererwidget.cpp

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,11 @@ QgsPointClusterRendererWidget::QgsPointClusterRendererWidget( QgsVectorLayer *la
6363

6464
if ( renderer )
6565
{
66-
mRenderer = QgsPointClusterRenderer::convertFromRenderer( renderer );
66+
mRenderer.reset( QgsPointClusterRenderer::convertFromRenderer( renderer ) );
6767
}
6868
if ( !mRenderer )
6969
{
70-
mRenderer = new QgsPointClusterRenderer();
70+
mRenderer = std::make_unique< QgsPointClusterRenderer >();
7171
}
7272

7373
blockAllSignals( true );
@@ -109,14 +109,11 @@ QgsPointClusterRendererWidget::QgsPointClusterRendererWidget( QgsVectorLayer *la
109109
mCenterSymbolToolButton->registerExpressionContextGenerator( this );
110110
}
111111

112-
QgsPointClusterRendererWidget::~QgsPointClusterRendererWidget()
113-
{
114-
delete mRenderer;
115-
}
112+
QgsPointClusterRendererWidget::~QgsPointClusterRendererWidget() = default;
116113

117114
QgsFeatureRenderer *QgsPointClusterRendererWidget::renderer()
118115
{
119-
return mRenderer;
116+
return mRenderer.get();
120117
}
121118

122119
void QgsPointClusterRendererWidget::setContext( const QgsSymbolWidgetContext &context )

‎src/gui/symbology/qgspointclusterrendererwidget.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ class GUI_EXPORT QgsPointClusterRendererWidget: public QgsRendererWidget, public
6464
QgsExpressionContext createExpressionContext() const override;
6565

6666
private:
67-
QgsPointClusterRenderer *mRenderer = nullptr;
67+
std::unique_ptr< QgsPointClusterRenderer > mRenderer;
6868

6969
void blockAllSignals( bool block );
7070
void setupBlankUi( const QString &layerName );

‎src/gui/symbology/qgspointdisplacementrendererwidget.cpp

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,11 @@ QgsPointDisplacementRendererWidget::QgsPointDisplacementRendererWidget( QgsVecto
7171

7272
if ( renderer )
7373
{
74-
mRenderer = QgsPointDisplacementRenderer::convertFromRenderer( renderer );
74+
mRenderer.reset( QgsPointDisplacementRenderer::convertFromRenderer( renderer ) );
7575
}
7676
if ( !mRenderer )
7777
{
78-
mRenderer = new QgsPointDisplacementRenderer();
78+
mRenderer = std::make_unique< QgsPointDisplacementRenderer >();
7979
}
8080

8181
blockAllSignals( true );
@@ -176,14 +176,11 @@ QgsPointDisplacementRendererWidget::QgsPointDisplacementRendererWidget( QgsVecto
176176
mCenterSymbolToolButton->registerExpressionContextGenerator( this );
177177
}
178178

179-
QgsPointDisplacementRendererWidget::~QgsPointDisplacementRendererWidget()
180-
{
181-
delete mRenderer;
182-
}
179+
QgsPointDisplacementRendererWidget::~QgsPointDisplacementRendererWidget() = default;
183180

184181
QgsFeatureRenderer *QgsPointDisplacementRendererWidget::renderer()
185182
{
186-
return mRenderer;
183+
return mRenderer.get();
187184
}
188185

189186
void QgsPointDisplacementRendererWidget::setContext( const QgsSymbolWidgetContext &context )

‎src/gui/symbology/qgspointdisplacementrendererwidget.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class GUI_EXPORT QgsPointDisplacementRendererWidget: public QgsRendererWidget, p
4444
QgsExpressionContext createExpressionContext() const override;
4545

4646
private:
47-
QgsPointDisplacementRenderer *mRenderer = nullptr;
47+
std::unique_ptr< QgsPointDisplacementRenderer > mRenderer;
4848

4949
void blockAllSignals( bool block );
5050
void setupBlankUi( const QString &layerName );

‎src/gui/symbology/qgsrulebasedrendererwidget.cpp

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,20 +61,20 @@ QgsRuleBasedRendererWidget::QgsRuleBasedRendererWidget( QgsVectorLayer *layer, Q
6161

6262
if ( renderer )
6363
{
64-
mRenderer = QgsRuleBasedRenderer::convertFromRenderer( renderer, layer );
64+
mRenderer.reset( QgsRuleBasedRenderer::convertFromRenderer( renderer, layer ) );
6565
}
6666
if ( !mRenderer )
6767
{
6868
// some default options
6969
QgsSymbol *symbol = QgsSymbol::defaultSymbol( mLayer->geometryType() );
7070

71-
mRenderer = new QgsRuleBasedRenderer( symbol );
71+
mRenderer = std::make_unique< QgsRuleBasedRenderer >( symbol );
7272
}
7373

7474
setupUi( this );
7575
this->layout()->setContentsMargins( 0, 0, 0, 0 );
7676

77-
mModel = new QgsRuleBasedRendererModel( mRenderer, viewRules );
77+
mModel = new QgsRuleBasedRendererModel( mRenderer.get(), viewRules );
7878
#ifdef ENABLE_MODELTEST
7979
new ModelTest( mModel, this ); // for model validity checking
8080
#endif
@@ -135,12 +135,11 @@ QgsRuleBasedRendererWidget::QgsRuleBasedRendererWidget( QgsVectorLayer *layer, Q
135135
QgsRuleBasedRendererWidget::~QgsRuleBasedRendererWidget()
136136
{
137137
qDeleteAll( mCopyBuffer );
138-
delete mRenderer;
139138
}
140139

141140
QgsFeatureRenderer *QgsRuleBasedRendererWidget::renderer()
142141
{
143-
return mRenderer;
142+
return mRenderer.get();
144143
}
145144

146145
void QgsRuleBasedRendererWidget::setDockMode( bool dockMode )
@@ -452,7 +451,7 @@ void QgsRuleBasedRendererWidget::setRenderingOrder()
452451
QgsPanelWidget *panel = QgsPanelWidget::findParentPanel( this );
453452
if ( panel && panel->dockMode() )
454453
{
455-
QgsSymbolLevelsWidget *widget = new QgsSymbolLevelsWidget( mRenderer, true, panel );
454+
QgsSymbolLevelsWidget *widget = new QgsSymbolLevelsWidget( mRenderer.get(), true, panel );
456455
widget->setForceOrderingEnabled( true );
457456
widget->setPanelTitle( tr( "Symbol Levels" ) );
458457
connect( widget, &QgsPanelWidget::widgetChanged, this, [ = ]()
@@ -463,7 +462,7 @@ void QgsRuleBasedRendererWidget::setRenderingOrder()
463462
}
464463
else
465464
{
466-
QgsSymbolLevelsDialog dlg( mRenderer, true, panel );
465+
QgsSymbolLevelsDialog dlg( mRenderer.get(), true, panel );
467466
dlg.setForceOrderingEnabled( true );
468467
if ( dlg.exec() )
469468
{

‎src/gui/symbology/qgsrulebasedrendererwidget.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ class GUI_EXPORT QgsRuleBasedRendererWidget : public QgsRendererWidget, private
166166
void refreshSymbolView() override;
167167
void keyPressEvent( QKeyEvent *event ) override;
168168

169-
QgsRuleBasedRenderer *mRenderer = nullptr;
169+
std::unique_ptr< QgsRuleBasedRenderer > mRenderer;
170170
QgsRuleBasedRendererModel *mModel = nullptr;
171171

172172
QMenu *mRefineMenu = nullptr;

0 commit comments

Comments
 (0)
Please sign in to comment.