Skip to content

Commit 96e10eb

Browse files
committed
If vector layer renderer cannot be loaded, fallback to default
Eg if loading a project which used a plugin based renderer which is not available, qgis would not renderer the layer and eventually crash. Now if the saved renderer could not be restored we fallback to a default renderer for the layer.
1 parent 95c4fa1 commit 96e10eb

File tree

1 file changed

+19
-8
lines changed

1 file changed

+19
-8
lines changed

src/core/qgsvectorlayer.cpp

+19-8
Original file line numberDiff line numberDiff line change
@@ -1786,6 +1786,7 @@ bool QgsVectorLayer::readSymbology( const QDomNode& node, QString& errorMessage
17861786

17871787
bool QgsVectorLayer::readStyle( const QDomNode &node, QString &errorMessage )
17881788
{
1789+
bool result = true;
17891790
emit readCustomSymbology( node.toElement(), errorMessage );
17901791

17911792
if ( hasGeometryType() )
@@ -1795,18 +1796,28 @@ bool QgsVectorLayer::readStyle( const QDomNode &node, QString &errorMessage )
17951796
if ( !rendererElement.isNull() )
17961797
{
17971798
QgsFeatureRenderer* r = QgsFeatureRenderer::load( rendererElement );
1798-
if ( !r )
1799-
return false;
1800-
1801-
setRenderer( r );
1799+
if ( r )
1800+
{
1801+
setRenderer( r );
1802+
}
1803+
else
1804+
{
1805+
result = false;
1806+
}
18021807
}
18031808
else
18041809
{
18051810
QgsFeatureRenderer* r = QgsSymbologyConversion::readOldRenderer( node, geometryType() );
1806-
if ( !r )
1807-
r = QgsFeatureRenderer::defaultRenderer( geometryType() );
1811+
if ( r )
1812+
{
1813+
setRenderer( r );
1814+
}
1815+
}
18081816

1809-
setRenderer( r );
1817+
// make sure layer has a renderer - if none exists, fallback to a default renderer
1818+
if ( !renderer() )
1819+
{
1820+
setRenderer( QgsFeatureRenderer::defaultRenderer( geometryType() ) );
18101821
}
18111822

18121823
QDomElement labelingElement = node.firstChildElement( "labeling" );
@@ -1879,7 +1890,7 @@ bool QgsVectorLayer::readStyle( const QDomNode &node, QString &errorMessage )
18791890
}
18801891
}
18811892
}
1882-
return true;
1893+
return result;
18831894
}
18841895

18851896
bool QgsVectorLayer::writeSymbology( QDomNode& node, QDomDocument& doc, QString& errorMessage ) const

0 commit comments

Comments
 (0)