diff --git a/src/app/qgsprojectlayergroupdialog.cpp b/src/app/qgsprojectlayergroupdialog.cpp index 7f6c32e8f2b..13650c007f3 100644 --- a/src/app/qgsprojectlayergroupdialog.cpp +++ b/src/app/qgsprojectlayergroupdialog.cpp @@ -168,38 +168,43 @@ void QgsProjectLayerGroupDialog::changeProjectFile() return; } + std::unique_ptr archive; + QDomDocument projectDom; if ( QgsZipUtils::isZipFile( mProjectFileWidget->filePath() ) ) { - QgsProjectArchive archive; + + archive = qgis::make_unique(); // unzip the archive - if ( !archive.unzip( mProjectFileWidget->filePath() ) ) + if ( !archive->unzip( mProjectFileWidget->filePath() ) ) { return; } // test if zip provides a .qgs file - if ( archive.projectFile().isEmpty() ) + if ( archive->projectFile().isEmpty() ) { return; } - projectFile.setFileName( archive.projectFile() ); + projectFile.setFileName( archive->projectFile() ); if ( !projectFile.exists() ) { return; } } - - if ( !projectDom.setContent( &projectFile ) ) + QString errorMesssage; + int errorLine; + if ( !projectDom.setContent( &projectFile, &errorMesssage, &errorLine ) ) { + QgsDebugMsg( QStringLiteral( "Error reading the project file %1 at line %2: %3" ) + .arg( projectFile.fileName() ) + .arg( errorLine ) + .arg( errorMesssage ) ); return; } - - - mRootGroup->removeAllChildren(); QDomElement layerTreeElem = projectDom.documentElement().firstChildElement( QStringLiteral( "layer-tree-group" ) );