diff --git a/src/core/processing/qgsprocessingparameters.cpp b/src/core/processing/qgsprocessingparameters.cpp index a68499c300c1..8c2af24f9e6c 100644 --- a/src/core/processing/qgsprocessingparameters.cpp +++ b/src/core/processing/qgsprocessingparameters.cpp @@ -1579,6 +1579,10 @@ QStringList QgsProcessingParameters::parameterAsFields( const QgsProcessingParam for ( const QVariant &var : constToList ) resultStringList << var.toString(); } + else if ( val.type() == QVariant::StringList ) + { + resultStringList = val.toStringList(); + } else resultStringList.append( val.toString().split( ';' ) ); } @@ -1595,6 +1599,10 @@ QStringList QgsProcessingParameters::parameterAsFields( const QgsProcessingParam for ( const QVariant &var : constToList ) resultStringList << var.toString(); } + else if ( definition->defaultValue().type() == QVariant::StringList ) + { + resultStringList = definition->defaultValue().toStringList(); + } else resultStringList.append( definition->defaultValue().toString().split( ';' ) ); } diff --git a/tests/src/analysis/testqgsprocessing.cpp b/tests/src/analysis/testqgsprocessing.cpp index be007c1575ff..2b0d6d383d6d 100644 --- a/tests/src/analysis/testqgsprocessing.cpp +++ b/tests/src/analysis/testqgsprocessing.cpp @@ -4879,6 +4879,18 @@ void TestQgsProcessing::parameterField() fields = QgsProcessingParameters::parameterAsFields( def.get(), params, context ); QCOMPARE( fields, QStringList() << "def" ); + // optional with string list default + def.reset( new QgsProcessingParameterField( "optional", QString(), QStringList() << QStringLiteral( "def" ) << QStringLiteral( "abc" ), QString(), QgsProcessingParameterField::Any, true, true ) ); + QVERIFY( def->checkValueIsAcceptable( QStringList() << "a" << "b" ) ); + fields = QgsProcessingParameters::parameterAsFields( def.get(), params, context ); + QCOMPARE( fields, QStringList() << "def" << "abc" ); + params.insert( "optional", QVariantList() << "f" << "h" ); + fields = QgsProcessingParameters::parameterAsFields( def.get(), params, context ); + QCOMPARE( fields, QStringList() << "f" << "h" ); + params.insert( "optional", QStringList() << "g" << "h" ); + fields = QgsProcessingParameters::parameterAsFields( def.get(), params, context ); + QCOMPARE( fields, QStringList() << "g" << "h" ); + // optional, no default def.reset( new QgsProcessingParameterField( "optional", QString(), QVariant(), QString(), QgsProcessingParameterField::Any, false, true ) ); params.insert( "optional", QVariant() );