Skip to content

Commit 70e1a5d

Browse files
rouaultnyalldawson
authored andcommitted
QgsRasterLayer: readXml(): read layer notes even when opening with FlagDontResolveLayers
Fixes qgis#58818 (cherry picked from commit 0c9320c)
1 parent 50404e1 commit 70e1a5d

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed

src/core/raster/qgsrasterlayer.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -2211,9 +2211,9 @@ bool QgsRasterLayer::readSymbology( const QDomNode &layer_node, QString &errorMe
22112211
{
22122212
const QString rendererType = rasterRendererElem.attribute( QStringLiteral( "type" ) );
22132213
QgsRasterRendererRegistryEntry rendererEntry;
2214-
if ( QgsApplication::rasterRendererRegistry()->rendererData( rendererType, rendererEntry ) )
2214+
if ( mDataProvider && QgsApplication::rasterRendererRegistry()->rendererData( rendererType, rendererEntry ) )
22152215
{
2216-
QgsRasterRenderer *renderer = rendererEntry.rendererCreateFunction( rasterRendererElem, dataProvider() );
2216+
QgsRasterRenderer *renderer = rendererEntry.rendererCreateFunction( rasterRendererElem, mDataProvider );
22172217
mPipe->set( renderer );
22182218
}
22192219
}
@@ -2402,8 +2402,8 @@ bool QgsRasterLayer::readXml( const QDomNode &layer_node, QgsReadWriteContext &c
24022402
if ( !( mReadFlags & QgsMapLayer::FlagDontResolveLayers ) )
24032403
{
24042404
QgsDebugError( QStringLiteral( "Raster data provider could not be created for %1" ).arg( mDataSource ) );
2405+
return false;
24052406
}
2406-
return false;
24072407
}
24082408

24092409
QString error;
@@ -2442,7 +2442,7 @@ bool QgsRasterLayer::readXml( const QDomNode &layer_node, QgsReadWriteContext &c
24422442

24432443
const QDomNodeList noDataBandList = noDataElement.elementsByTagName( QStringLiteral( "noDataList" ) );
24442444

2445-
for ( int i = 0; i < noDataBandList.size(); ++i )
2445+
for ( int i = 0; mDataProvider && i < noDataBandList.size(); ++i )
24462446
{
24472447
const QDomElement bandElement = noDataBandList.at( i ).toElement();
24482448
bool ok;

tests/src/python/test_qgsproject.py

+26
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
QgsExpressionContextUtils,
3434
QgsFeature,
3535
QgsGeometry,
36+
QgsLayerNotesUtils,
3637
QgsLabelingEngineSettings,
3738
QgsMapLayer,
3839
QgsProject,
@@ -1611,6 +1612,31 @@ def test_remember_evaluate_default_values(self):
16111612
self.assertEqual(layers[0].dataProvider().providerProperty(QgsDataProvider.EvaluateDefaultValues, None), True)
16121613
self.assertEqual(layers[1].dataProvider().providerProperty(QgsDataProvider.EvaluateDefaultValues, None), True)
16131614

1615+
def testRasterLayerFlagDontResolveLayers(self):
1616+
"""
1617+
Test that we can read layer notes from a raster layer when opening with FlagDontResolveLayers
1618+
"""
1619+
tmpDir = QTemporaryDir()
1620+
tmpFile = f"{tmpDir.path()}/project.qgs"
1621+
copyfile(os.path.join(TEST_DATA_DIR, "landsat_4326.tif"), os.path.join(tmpDir.path(), "landsat_4326.tif"))
1622+
1623+
project = QgsProject()
1624+
1625+
l = QgsRasterLayer(os.path.join(tmpDir.path(), "landsat_4326.tif"), "landsat", "gdal")
1626+
self.assertTrue(l.isValid())
1627+
QgsLayerNotesUtils.setLayerNotes(l, 'my notes')
1628+
self.assertTrue(project.addMapLayers([l]))
1629+
self.assertTrue(project.write(tmpFile))
1630+
del project
1631+
1632+
# Read the project with FlagDontResolveLayers
1633+
project = QgsProject()
1634+
self.assertTrue(project.read(tmpFile, QgsProject.FlagDontResolveLayers))
1635+
layers = list(project.mapLayers().values())
1636+
self.assertEqual(QgsLayerNotesUtils.layerNotes(layers[0]), "my notes")
1637+
1638+
del project
1639+
16141640

16151641
if __name__ == '__main__':
16161642
unittest.main()

0 commit comments

Comments
 (0)