Skip to content

Commit efdaf5f

Browse files
authored
Merge pull request #6312 from nyalldawson/field_exp_null
Don't silently discard requests to set QgsFieldExpressionWidget to an empty expression
2 parents ac28714 + 9dca6da commit efdaf5f

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

src/gui/qgsfieldexpressionwidget.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,10 @@ void QgsFieldExpressionWidget::setLayer( QgsMapLayer *layer )
173173
void QgsFieldExpressionWidget::setField( const QString &fieldName )
174174
{
175175
if ( fieldName.isEmpty() )
176+
{
177+
setRow( -1 );
176178
return;
179+
}
177180

178181
QModelIndex idx = mFieldProxyModel->sourceFieldModel()->indexFromName( fieldName );
179182
if ( !idx.isValid() )

tests/src/gui/testqgsfieldexpressionwidget.cpp

+22
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ class TestQgsFieldExpressionWidget : public QObject
4747
void asExpression();
4848
void testIsValid();
4949
void testFilters();
50+
void setNull();
5051

5152
private:
5253
QgsFieldExpressionWidget *mWidget = nullptr;
@@ -269,6 +270,27 @@ void TestQgsFieldExpressionWidget::testFilters()
269270
QgsProject::instance()->removeMapLayer( layer );
270271
}
271272

273+
void TestQgsFieldExpressionWidget::setNull()
274+
{
275+
// test that QgsFieldExpressionWidget can be set to an empty value
276+
QgsVectorLayer *layer = new QgsVectorLayer( QStringLiteral( "point?field=fld:int&field=fld2:int&field=fld3:int" ), QStringLiteral( "x" ), QStringLiteral( "memory" ) );
277+
QgsProject::instance()->addMapLayer( layer );
278+
279+
std::unique_ptr< QgsFieldExpressionWidget > widget( new QgsFieldExpressionWidget() );
280+
widget->setLayer( layer );
281+
282+
widget->setField( QString() );
283+
QVERIFY( widget->currentField().isEmpty() );
284+
285+
widget->setField( QStringLiteral( "fld2" ) );
286+
QCOMPARE( widget->currentField(), QStringLiteral( "fld2" ) );
287+
288+
widget->setField( QString() );
289+
QVERIFY( widget->currentField().isEmpty() );
290+
291+
QgsProject::instance()->removeMapLayer( layer );
292+
}
293+
272294
QGSTEST_MAIN( TestQgsFieldExpressionWidget )
273295
#include "testqgsfieldexpressionwidget.moc"
274296

0 commit comments

Comments
 (0)