From 96e10ebff20f633a2a476eec088a3be354c73862 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Mon, 5 Sep 2016 08:53:00 +1000 Subject: [PATCH] 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. --- src/core/qgsvectorlayer.cpp | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/core/qgsvectorlayer.cpp b/src/core/qgsvectorlayer.cpp index 3e2850385db..bbec2d4e5c4 100644 --- a/src/core/qgsvectorlayer.cpp +++ b/src/core/qgsvectorlayer.cpp @@ -1786,6 +1786,7 @@ bool QgsVectorLayer::readSymbology( const QDomNode& node, QString& errorMessage bool QgsVectorLayer::readStyle( const QDomNode &node, QString &errorMessage ) { + bool result = true; emit readCustomSymbology( node.toElement(), errorMessage ); if ( hasGeometryType() ) @@ -1795,18 +1796,28 @@ bool QgsVectorLayer::readStyle( const QDomNode &node, QString &errorMessage ) if ( !rendererElement.isNull() ) { QgsFeatureRenderer* r = QgsFeatureRenderer::load( rendererElement ); - if ( !r ) - return false; - - setRenderer( r ); + if ( r ) + { + setRenderer( r ); + } + else + { + result = false; + } } else { QgsFeatureRenderer* r = QgsSymbologyConversion::readOldRenderer( node, geometryType() ); - if ( !r ) - r = QgsFeatureRenderer::defaultRenderer( geometryType() ); + if ( r ) + { + setRenderer( r ); + } + } - setRenderer( r ); + // make sure layer has a renderer - if none exists, fallback to a default renderer + if ( !renderer() ) + { + setRenderer( QgsFeatureRenderer::defaultRenderer( geometryType() ) ); } QDomElement labelingElement = node.firstChildElement( "labeling" ); @@ -1879,7 +1890,7 @@ bool QgsVectorLayer::readStyle( const QDomNode &node, QString &errorMessage ) } } } - return true; + return result; } bool QgsVectorLayer::writeSymbology( QDomNode& node, QDomDocument& doc, QString& errorMessage ) const