Skip to content

Commit 0c9320c

Browse files
rouaultnyalldawson
authored andcommitted
QgsRasterLayer: readXml(): read layer notes even when opening with FlagDontResolveLayers
Fixes qgis#58818
1 parent cc6feb1 commit 0c9320c

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
@@ -2216,9 +2216,9 @@ bool QgsRasterLayer::readSymbology( const QDomNode &layer_node, QString &errorMe
22162216
{
22172217
const QString rendererType = rasterRendererElem.attribute( QStringLiteral( "type" ) );
22182218
QgsRasterRendererRegistryEntry rendererEntry;
2219-
if ( QgsApplication::rasterRendererRegistry()->rendererData( rendererType, rendererEntry ) )
2219+
if ( mDataProvider && QgsApplication::rasterRendererRegistry()->rendererData( rendererType, rendererEntry ) )
22202220
{
2221-
QgsRasterRenderer *renderer = rendererEntry.rendererCreateFunction( rasterRendererElem, dataProvider() );
2221+
QgsRasterRenderer *renderer = rendererEntry.rendererCreateFunction( rasterRendererElem, mDataProvider );
22222222
mPipe->set( renderer );
22232223
}
22242224
}
@@ -2412,8 +2412,8 @@ bool QgsRasterLayer::readXml( const QDomNode &layer_node, QgsReadWriteContext &c
24122412
if ( !( mReadFlags & QgsMapLayer::FlagDontResolveLayers ) )
24132413
{
24142414
QgsDebugError( QStringLiteral( "Raster data provider could not be created for %1" ).arg( mDataSource ) );
2415+
return false;
24152416
}
2416-
return false;
24172417
}
24182418

24192419
QString error;
@@ -2452,7 +2452,7 @@ bool QgsRasterLayer::readXml( const QDomNode &layer_node, QgsReadWriteContext &c
24522452

24532453
const QDomNodeList noDataBandList = noDataElement.elementsByTagName( QStringLiteral( "noDataList" ) );
24542454

2455-
for ( int i = 0; i < noDataBandList.size(); ++i )
2455+
for ( int i = 0; mDataProvider && i < noDataBandList.size(); ++i )
24562456
{
24572457
const QDomElement bandElement = noDataBandList.at( i ).toElement();
24582458
bool ok;

tests/src/python/test_qgsproject.py

+26
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
QgsExpressionContextUtils,
3333
QgsFeature,
3434
QgsGeometry,
35+
QgsLayerNotesUtils,
3536
QgsLabelingEngineSettings,
3637
QgsMapLayer,
3738
QgsProject,
@@ -1890,6 +1891,31 @@ def test_remember_evaluate_default_values(self):
18901891
self.assertEqual(layers[0].dataProvider().providerProperty(QgsDataProvider.ProviderProperty.EvaluateDefaultValues, None), True)
18911892
self.assertEqual(layers[1].dataProvider().providerProperty(QgsDataProvider.ProviderProperty.EvaluateDefaultValues, None), True)
18921893

1894+
def testRasterLayerFlagDontResolveLayers(self):
1895+
"""
1896+
Test that we can read layer notes from a raster layer when opening with FlagDontResolveLayers
1897+
"""
1898+
tmpDir = QTemporaryDir()
1899+
tmpFile = f"{tmpDir.path()}/project.qgs"
1900+
copyfile(os.path.join(TEST_DATA_DIR, "landsat_4326.tif"), os.path.join(tmpDir.path(), "landsat_4326.tif"))
1901+
1902+
project = QgsProject()
1903+
1904+
l = QgsRasterLayer(os.path.join(tmpDir.path(), "landsat_4326.tif"), "landsat", "gdal")
1905+
self.assertTrue(l.isValid())
1906+
QgsLayerNotesUtils.setLayerNotes(l, 'my notes')
1907+
self.assertTrue(project.addMapLayers([l]))
1908+
self.assertTrue(project.write(tmpFile))
1909+
del project
1910+
1911+
# Read the project with FlagDontResolveLayers
1912+
project = QgsProject()
1913+
self.assertTrue(project.read(tmpFile, QgsProject.FlagDontResolveLayers))
1914+
layers = list(project.mapLayers().values())
1915+
self.assertEqual(QgsLayerNotesUtils.layerNotes(layers[0]), "my notes")
1916+
1917+
del project
1918+
18931919

18941920
if __name__ == '__main__':
18951921
unittest.main()

0 commit comments

Comments
 (0)