Skip to content

Commit 6af7d4d

Browse files
authoredAug 1, 2023
Fix bug when exporting layer and using both displayed value and different export attribute name*
Fix #54005
1 parent a519527 commit 6af7d4d

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed
 

‎src/app/qgisapp.cpp

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8338,7 +8338,7 @@ void QgisApp::saveStyleFile( QgsMapLayer *layer )
83388338
class QgisAppFieldValueConverter : public QgsVectorFileWriter::FieldValueConverter
83398339
{
83408340
public:
8341-
QgisAppFieldValueConverter( QgsVectorLayer *vl, const QgsAttributeList &attributesAsDisplayedValues );
8341+
QgisAppFieldValueConverter( QgsVectorLayer *vl, const QgsAttributeList &attributesAsDisplayedValues, const QStringList &attributesExportNames );
83428342

83438343
QgsField fieldDefinition( const QgsField &field ) override;
83448344

@@ -8349,11 +8349,14 @@ class QgisAppFieldValueConverter : public QgsVectorFileWriter::FieldValueConvert
83498349
private:
83508350
QPointer< QgsVectorLayer > mLayer;
83518351
QgsAttributeList mAttributesAsDisplayedValues;
8352+
QStringList mAttributesExportNames;
83528353
};
83538354

8354-
QgisAppFieldValueConverter::QgisAppFieldValueConverter( QgsVectorLayer *vl, const QgsAttributeList &attributesAsDisplayedValues )
8355+
QgisAppFieldValueConverter::QgisAppFieldValueConverter( QgsVectorLayer *vl, const QgsAttributeList &attributesAsDisplayedValues, const QStringList &attributesExportNames )
83558356
: mLayer( vl )
83568357
, mAttributesAsDisplayedValues( attributesAsDisplayedValues )
8358+
, mAttributesExportNames( attributesExportNames )
8359+
83578360
{
83588361
}
83598362

@@ -8363,6 +8366,12 @@ QgsField QgisAppFieldValueConverter::fieldDefinition( const QgsField &field )
83638366
return field;
83648367

83658368
int idx = mLayer->fields().indexFromName( field.name() );
8369+
// If not found in the original field name, it might be in the export names
8370+
if ( idx == -1 )
8371+
{
8372+
idx = mAttributesExportNames.indexOf( field.name() );
8373+
}
8374+
83668375
if ( mAttributesAsDisplayedValues.contains( idx ) )
83678376
{
83688377
return QgsField( field.name(), QVariant::String );
@@ -8476,7 +8485,7 @@ QString QgisApp::saveAsVectorFileGeneral( QgsVectorLayer *vlayer, bool symbology
84768485
}
84778486

84788487
QgsRectangle filterExtent = dialog->filterExtent();
8479-
QgisAppFieldValueConverter converter( vlayer, dialog->attributesAsDisplayedValues() );
8488+
QgisAppFieldValueConverter converter( vlayer, dialog->attributesAsDisplayedValues(), dialog->attributesExportNames() );
84808489
QgisAppFieldValueConverter *converterPtr = nullptr;
84818490
// No need to use the converter if there is nothing to convert
84828491
if ( !dialog->attributesAsDisplayedValues().isEmpty() )

0 commit comments

Comments
 (0)
Please sign in to comment.