Skip to content

Commit bc23f1d

Browse files
committed
Ensure QgsMapLayer private QObject members are correctly parented
to the layer
1 parent 2defaff commit bc23f1d

File tree

2 files changed

+27
-32
lines changed

2 files changed

+27
-32
lines changed

src/core/qgsmaplayer.cpp

+19-26
Original file line numberDiff line numberDiff line change
@@ -70,12 +70,13 @@ QgsMapLayer::QgsMapLayer( QgsMapLayer::LayerType type,
7070
const QString &lyrname,
7171
const QString &source )
7272
: mDataSource( source )
73+
, mLayerName( lyrname )
7374
, mLayerType( type )
75+
, mUndoStack( new QUndoStack( this ) )
76+
, mUndoStackStyles( new QUndoStack( this ) )
7477
, mStyleManager( new QgsMapLayerStyleManager( this ) )
78+
, mRefreshTimer( new QTimer( this ) )
7579
{
76-
// Set the display name = internal name
77-
mLayerName = lyrname;
78-
7980
//mShortName.replace( QRegExp( "[\\W]" ), "_" );
8081

8182
// Generate the unique ID of this layer
@@ -91,13 +92,8 @@ QgsMapLayer::QgsMapLayer( QgsMapLayer::LayerType type,
9192
// there for the compiler, so the pattern is actually \W
9293
mID.replace( QRegExp( "[\\W]" ), QStringLiteral( "_" ) );
9394

94-
//set some generous defaults for scale based visibility
95-
mMinScale = 0;
96-
mMaxScale = 100000000;
97-
mScaleBasedVisibility = false;
98-
9995
connect( mStyleManager, &QgsMapLayerStyleManager::currentStyleChanged, this, &QgsMapLayer::styleChanged );
100-
connect( &mRefreshTimer, &QTimer::timeout, this, [ = ] { triggerRepaint( true ); } );
96+
connect( mRefreshTimer, &QTimer::timeout, this, [ = ] { triggerRepaint( true ); } );
10197
}
10298

10399
QgsMapLayer::~QgsMapLayer()
@@ -586,8 +582,8 @@ bool QgsMapLayer::writeLayerXml( QDomElement &layerElement, QDomDocument &docume
586582
layerElement.appendChild( QgsXmlUtils::writeRectangle( mExtent, document ) );
587583
}
588584

589-
layerElement.setAttribute( QStringLiteral( "autoRefreshTime" ), QString::number( mRefreshTimer.interval() ) );
590-
layerElement.setAttribute( QStringLiteral( "autoRefreshEnabled" ), mRefreshTimer.isActive() ? 1 : 0 );
585+
layerElement.setAttribute( QStringLiteral( "autoRefreshTime" ), QString::number( mRefreshTimer->interval() ) );
586+
layerElement.setAttribute( QStringLiteral( "autoRefreshEnabled" ), mRefreshTimer->isActive() ? 1 : 0 );
591587
layerElement.setAttribute( QStringLiteral( "refreshOnNotifyEnabled" ), mIsRefreshOnNofifyEnabled ? 1 : 0 );
592588
layerElement.setAttribute( QStringLiteral( "refreshOnNotifyMessage" ), mRefreshOnNofifyMessage );
593589

@@ -913,36 +909,36 @@ bool QgsMapLayer::hasScaleBasedVisibility() const
913909

914910
bool QgsMapLayer::hasAutoRefreshEnabled() const
915911
{
916-
return mRefreshTimer.isActive();
912+
return mRefreshTimer->isActive();
917913
}
918914

919915
int QgsMapLayer::autoRefreshInterval() const
920916
{
921-
return mRefreshTimer.interval();
917+
return mRefreshTimer->interval();
922918
}
923919

924920
void QgsMapLayer::setAutoRefreshInterval( int interval )
925921
{
926922
if ( interval <= 0 )
927923
{
928-
mRefreshTimer.stop();
929-
mRefreshTimer.setInterval( 0 );
924+
mRefreshTimer->stop();
925+
mRefreshTimer->setInterval( 0 );
930926
}
931927
else
932928
{
933-
mRefreshTimer.setInterval( interval );
929+
mRefreshTimer->setInterval( interval );
934930
}
935-
emit autoRefreshIntervalChanged( mRefreshTimer.isActive() ? mRefreshTimer.interval() : 0 );
931+
emit autoRefreshIntervalChanged( mRefreshTimer->isActive() ? mRefreshTimer->interval() : 0 );
936932
}
937933

938934
void QgsMapLayer::setAutoRefreshEnabled( bool enabled )
939935
{
940936
if ( !enabled )
941-
mRefreshTimer.stop();
942-
else if ( mRefreshTimer.interval() > 0 )
943-
mRefreshTimer.start();
937+
mRefreshTimer->stop();
938+
else if ( mRefreshTimer->interval() > 0 )
939+
mRefreshTimer->start();
944940

945-
emit autoRefreshIntervalChanged( mRefreshTimer.isActive() ? mRefreshTimer.interval() : 0 );
941+
emit autoRefreshIntervalChanged( mRefreshTimer->isActive() ? mRefreshTimer->interval() : 0 );
946942
}
947943

948944
const QgsLayerMetadata &QgsMapLayer::metadata() const
@@ -1824,7 +1820,6 @@ void QgsMapLayer::writeCommonStyle( QDomElement &layerElement, QDomDocument &doc
18241820
}
18251821
}
18261822

1827-
18281823
void QgsMapLayer::readCommonStyle( const QDomElement &layerElement, const QgsReadWriteContext &context )
18291824
{
18301825
QgsAbstract3DRenderer *r3D = nullptr;
@@ -1841,18 +1836,16 @@ void QgsMapLayer::readCommonStyle( const QDomElement &layerElement, const QgsRea
18411836
setRenderer3D( r3D );
18421837
}
18431838

1844-
18451839
QUndoStack *QgsMapLayer::undoStack()
18461840
{
1847-
return &mUndoStack;
1841+
return mUndoStack;
18481842
}
18491843

18501844
QUndoStack *QgsMapLayer::undoStackStyles()
18511845
{
1852-
return &mUndoStackStyles;
1846+
return mUndoStackStyles;
18531847
}
18541848

1855-
18561849
QStringList QgsMapLayer::customPropertyKeys() const
18571850
{
18581851
return mCustomProperties.keys();

src/core/qgsmaplayer.h

+8-6
Original file line numberDiff line numberDiff line change
@@ -1304,17 +1304,19 @@ class CORE_EXPORT QgsMapLayer : public QObject
13041304
//! Tag for embedding additional information
13051305
QString mTag;
13061306

1307+
//set some generous defaults for scale based visibility
1308+
13071309
//! Minimum scale denominator at which this layer should be displayed
1308-
double mMinScale;
1310+
double mMinScale = 0;
13091311
//! Maximum scale denominator at which this layer should be displayed
1310-
double mMaxScale;
1312+
double mMaxScale = 100000000;
13111313
//! A flag that tells us whether to use the above vars to restrict layer visibility
1312-
bool mScaleBasedVisibility;
1314+
bool mScaleBasedVisibility = false;
13131315

13141316
//! Collection of undoable operations for this layer. *
1315-
QUndoStack mUndoStack;
1317+
QUndoStack *mUndoStack = nullptr;
13161318

1317-
QUndoStack mUndoStackStyles;
1319+
QUndoStack *mUndoStackStyles = nullptr;
13181320

13191321
//! Layer's persistent storage of additional properties (may be used by plugins)
13201322
QgsObjectCustomProperties mCustomProperties;
@@ -1326,7 +1328,7 @@ class CORE_EXPORT QgsMapLayer : public QObject
13261328
QgsMapLayerStyleManager *mStyleManager = nullptr;
13271329

13281330
//! Timer for triggering automatic refreshes of the layer
1329-
QTimer mRefreshTimer;
1331+
QTimer *mRefreshTimer = nullptr;
13301332

13311333
QgsLayerMetadata mMetadata;
13321334

0 commit comments

Comments
 (0)