@@ -432,7 +432,7 @@ bool QgsMapLayer::readXml( const QDomNode& layer_node )
432432
433433
434434
435- bool QgsMapLayer::writeLayerXML ( QDomElement& layerElement, QDomDocument& document )
435+ bool QgsMapLayer::writeLayerXML ( QDomElement& layerElement, QDomDocument& document, QString relativeBasePath )
436436{
437437 // use scale dependent visibility flag
438438 layerElement.setAttribute ( " hasScaleBasedVisibilityFlag" , hasScaleBasedVisibility () ? 1 : 0 );
@@ -456,26 +456,26 @@ bool QgsMapLayer::writeLayerXML( QDomElement& layerElement, QDomDocument& docume
456456 if ( vlayer && vlayer->providerType () == " spatialite" )
457457 {
458458 QgsDataSourceURI uri ( src );
459- QString database = QgsProject::instance ()->writePath ( uri.database () );
459+ QString database = QgsProject::instance ()->writePath ( uri.database (), relativeBasePath );
460460 uri.setConnection ( uri.host (), uri.port (), database, uri.username (), uri.password () );
461461 src = uri.uri ();
462462 }
463463 else if ( vlayer && vlayer->providerType () == " ogr" )
464464 {
465465 QStringList theURIParts = src.split ( " |" );
466- theURIParts[0 ] = QgsProject::instance ()->writePath ( theURIParts[0 ] );
466+ theURIParts[0 ] = QgsProject::instance ()->writePath ( theURIParts[0 ], relativeBasePath );
467467 src = theURIParts.join ( " |" );
468468 }
469469 else if ( vlayer && vlayer->providerType () == " delimitedtext" )
470470 {
471471 QUrl urlSource = QUrl::fromEncoded ( src.toAscii () );
472- QUrl urlDest = QUrl::fromLocalFile ( QgsProject::instance ()->writePath ( urlSource.toLocalFile () ) );
472+ QUrl urlDest = QUrl::fromLocalFile ( QgsProject::instance ()->writePath ( urlSource.toLocalFile (), relativeBasePath ) );
473473 urlDest.setQueryItems ( urlSource.queryItems () );
474474 src = QString::fromAscii ( urlDest.toEncoded () );
475475 }
476476 else
477477 {
478- src = QgsProject::instance ()->writePath ( src );
478+ src = QgsProject::instance ()->writePath ( src, relativeBasePath );
479479 }
480480
481481 QDomText dataSourceText = document.createTextNode ( src );
@@ -599,14 +599,14 @@ bool QgsMapLayer::writeLayerXML( QDomElement& layerElement, QDomDocument& docume
599599
600600} // bool QgsMapLayer::writeXML
601601
602- QDomDocument QgsMapLayer::asLayerDefinition ( QList<QgsMapLayer *> layers )
602+ QDomDocument QgsMapLayer::asLayerDefinition ( QList<QgsMapLayer *> layers, QString relativeBasePath )
603603{
604604 QDomDocument doc ( " qgis-layer-definition" );
605605 QDomElement layerselm = doc.createElement ( " maplayers" );
606606 foreach ( QgsMapLayer* layer, layers )
607607 {
608608 QDomElement layerelm = doc.createElement ( " maplayer" );
609- layer->writeLayerXML ( layerelm, doc );
609+ layer->writeLayerXML ( layerelm, doc, relativeBasePath );
610610 layerelm.removeChild ( layerelm.firstChildElement ( " id" ) );
611611 layerselm.appendChild ( layerelm );
612612 }
@@ -664,6 +664,8 @@ QList<QgsMapLayer *> QgsMapLayer::fromLayerDefinitionFile( const QString qlrfile
664664 return QList<QgsMapLayer*>();
665665 }
666666
667+ QFileInfo fileinfo ( file );
668+ QDir::setCurrent ( fileinfo.absoluteDir ().path () );
667669 return QgsMapLayer::fromLayerDefinition ( doc );
668670}
669671
0 commit comments