Skip to content

Commit 6e3ee46

Browse files
authored
Merge pull request #7206 from m-kuhn/fix18380
Fix loading layers within embedded groups
2 parents 4e084b6 + c3747e9 commit 6e3ee46

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed

src/core/qgsproject.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -2151,6 +2151,7 @@ QgsLayerTreeGroup *QgsProject::createEmbeddedGroup( const QString &groupName, co
21512151
QgsLayerTreeLayer *layer = newGroup->findLayer( layerId );
21522152
if ( layer )
21532153
{
2154+
layer->resolveReferences( this );
21542155
layer->setItemVisibilityChecked( invisibleLayers.contains( layerId ) );
21552156
}
21562157
}

tests/src/core/testqgslayertree.cpp

+64
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ class TestQgsLayerTree : public QObject
4646
void testLegendSymbolGraduated();
4747
void testLegendSymbolRuleBased();
4848
void testResolveReferences();
49+
void testEmbeddedGroup();
4950

5051
private:
5152

@@ -525,5 +526,68 @@ void TestQgsLayerTree::testRendererLegend( QgsFeatureRenderer *renderer )
525526
}
526527

527528

529+
void TestQgsLayerTree::testEmbeddedGroup()
530+
{
531+
QString dataDir( TEST_DATA_DIR ); //defined in CmakeLists.txt
532+
QString layerPath = dataDir + QStringLiteral( "/points.shp" );
533+
534+
// build a project with 3 layers, each having a simple renderer with SVG marker
535+
// - existing SVG file in project dir
536+
// - existing SVG file in QGIS dir
537+
// - non-exsiting SVG file
538+
539+
QTemporaryDir dir;
540+
QVERIFY( dir.isValid() );
541+
// on mac the returned path was not canonical and the resolver failed to convert paths properly
542+
QString dirPath = QFileInfo( dir.path() ).canonicalFilePath();
543+
544+
QString projectFilename = dirPath + QStringLiteral( "/project.qgs" );
545+
546+
QgsVectorLayer *layer1 = new QgsVectorLayer( layerPath, QStringLiteral( "points 1" ), QStringLiteral( "ogr" ) );
547+
QgsVectorLayer *layer2 = new QgsVectorLayer( layerPath, QStringLiteral( "points 2" ), QStringLiteral( "ogr" ) );
548+
QgsVectorLayer *layer3 = new QgsVectorLayer( layerPath, QStringLiteral( "points 3" ), QStringLiteral( "ogr" ) );
549+
550+
QVERIFY( layer1->isValid() );
551+
552+
QgsProject project;
553+
project.addMapLayers( QList<QgsMapLayer *>() << layer1 << layer2 << layer3, false );
554+
QgsLayerTreeGroup *grp = project.layerTreeRoot()->addGroup( QStringLiteral( "Embed" ) );
555+
grp->addLayer( layer1 );
556+
grp->addLayer( layer2 );
557+
grp->addLayer( layer3 );
558+
project.write( projectFilename );
559+
560+
//
561+
// now let's use the layer group embedded in another project...
562+
//
563+
564+
QgsProject projectMaster;
565+
QgsLayerTreeGroup *embeddedGroup = projectMaster.createEmbeddedGroup( grp->name(), projectFilename, QStringList() );
566+
QVERIFY( embeddedGroup );
567+
QCOMPARE( embeddedGroup->children().size(), 3 );
568+
569+
for ( QgsLayerTreeNode *child : embeddedGroup->children() )
570+
{
571+
QVERIFY( QgsLayerTree::toLayer( child )->layer() );
572+
}
573+
projectMaster.layerTreeRoot()->addChildNode( embeddedGroup );
574+
575+
QString projectMasterFilename = dirPath + QStringLiteral( "/projectMaster.qgs" );
576+
projectMaster.write( projectMasterFilename );
577+
projectMaster.clear();
578+
579+
QgsProject projectMasterCopy;
580+
projectMasterCopy.read( projectMasterFilename );
581+
QgsLayerTreeGroup *masterEmbeddedGroup = projectMasterCopy.layerTreeRoot()->findGroup( QStringLiteral( "Embed" ) );
582+
QVERIFY( masterEmbeddedGroup );
583+
QCOMPARE( masterEmbeddedGroup->children().size(), 3 );
584+
585+
for ( QgsLayerTreeNode *child : masterEmbeddedGroup->children() )
586+
{
587+
QVERIFY( QgsLayerTree::toLayer( child )->layer() );
588+
}
589+
}
590+
591+
528592
QGSTEST_MAIN( TestQgsLayerTree )
529593
#include "testqgslayertree.moc"

0 commit comments

Comments
 (0)