diff --git a/src/gui/editorwidgets/qgsvaluerelationconfigdlg.cpp b/src/gui/editorwidgets/qgsvaluerelationconfigdlg.cpp index 553a0e90a29e..f00ffbce0630 100644 --- a/src/gui/editorwidgets/qgsvaluerelationconfigdlg.cpp +++ b/src/gui/editorwidgets/qgsvaluerelationconfigdlg.cpp @@ -54,6 +54,13 @@ QgsValueRelationConfigDlg::QgsValueRelationConfigDlg( QgsVectorLayer *vl, int fi } ); + connect( mUseCompleter, &QCheckBox::stateChanged, this, [ = ]( int state ) + { + mCompleterMatchFromStart->setEnabled( static_cast( state ) == Qt::CheckState::Checked ); + } ); + + mCompleterMatchFromStart->setEnabled( mUseCompleter->isChecked() ); + connect( mNofColumns, static_cast < void ( QSpinBox::* )( int ) > ( &QSpinBox::valueChanged ), this, &QgsEditorConfigWidget::changed ); layerChanged(); @@ -78,6 +85,8 @@ QVariantMap QgsValueRelationConfigDlg::config() cfg.insert( QStringLiteral( "OrderByValue" ), mOrderByValue->isChecked() ); cfg.insert( QStringLiteral( "FilterExpression" ), mFilterExpression->toPlainText() ); cfg.insert( QStringLiteral( "UseCompleter" ), mUseCompleter->isChecked() ); + const Qt::MatchFlags completerMatchFlags { mCompleterMatchFromStart->isChecked() ? Qt::MatchFlag::MatchStartsWith : Qt::MatchFlag::MatchContains }; + cfg.insert( QStringLiteral( "CompleterMatchFlags" ), static_cast( completerMatchFlags ) ); return cfg; } @@ -100,6 +109,9 @@ void QgsValueRelationConfigDlg::setConfig( const QVariantMap &config ) mOrderByValue->setChecked( config.value( QStringLiteral( "OrderByValue" ) ).toBool() ); mFilterExpression->setPlainText( config.value( QStringLiteral( "FilterExpression" ) ).toString() ); mUseCompleter->setChecked( config.value( QStringLiteral( "UseCompleter" ) ).toBool() ); + // Default is MatchStartsWith for backwards compatibility + const Qt::MatchFlags completerMatchFlags { config.contains( QStringLiteral( "CompleterMatchFlags" ) ) ? static_cast( config.value( QStringLiteral( "CompleterMatchFlags" ), Qt::MatchFlag::MatchStartsWith ).toInt( ) ) : Qt::MatchFlag::MatchStartsWith }; + mCompleterMatchFromStart->setChecked( completerMatchFlags.testFlag( Qt::MatchFlag::MatchStartsWith ) ); } void QgsValueRelationConfigDlg::layerChanged() diff --git a/src/gui/editorwidgets/qgsvaluerelationwidgetwrapper.cpp b/src/gui/editorwidgets/qgsvaluerelationwidgetwrapper.cpp index 6e7369203617..bfb57306db6f 100644 --- a/src/gui/editorwidgets/qgsvaluerelationwidgetwrapper.cpp +++ b/src/gui/editorwidgets/qgsvaluerelationwidgetwrapper.cpp @@ -560,6 +560,17 @@ void QgsValueRelationWidgetWrapper::populate() } QStringListModel *m = new QStringListModel( values, mLineEdit ); QCompleter *completer = new QCompleter( m, mLineEdit ); + + const Qt::MatchFlags completerMatchFlags { config().contains( QStringLiteral( "CompleterMatchFlags" ) ) ? static_cast( config().value( QStringLiteral( "CompleterMatchFlags" ), Qt::MatchFlag::MatchStartsWith ).toInt( ) ) : Qt::MatchFlag::MatchStartsWith }; + + if ( completerMatchFlags.testFlag( Qt::MatchFlag::MatchContains ) ) + { + completer->setFilterMode( Qt::MatchFlag::MatchContains ); + } + else + { + completer->setFilterMode( Qt::MatchFlag::MatchStartsWith ); + } completer->setCaseSensitivity( Qt::CaseInsensitive ); mLineEdit->setCompleter( completer ); } diff --git a/src/ui/editorwidgets/qgsvaluerelationconfigdlgbase.ui b/src/ui/editorwidgets/qgsvaluerelationconfigdlgbase.ui index c6d71b9dd2dd..ebd8ddf7e280 100644 --- a/src/ui/editorwidgets/qgsvaluerelationconfigdlgbase.ui +++ b/src/ui/editorwidgets/qgsvaluerelationconfigdlgbase.ui @@ -14,7 +14,26 @@ Form - + + + + + + + + + + Value column + + + mValueColumn + + + + + + + @@ -32,7 +51,7 @@ Qt::RightToLeft - + :/images/themes/default/mIconExpression.svg:/images/themes/default/mIconExpression.svg @@ -52,23 +71,36 @@ - - + + - Number of columns + Key column + + + mKeyColumn - - + + - - + + - Select layer, key column and value column + Allow multiple selections + + + + Allow NULL value + + + + + + @@ -79,30 +111,27 @@ - - - - - + + - - + + - Allow multiple selections + Number of columns - - + + - Allow NULL value + Description column - - + + - Use completer + Select layer, key column and value column @@ -113,42 +142,20 @@ - - + + - Key column - - - mKeyColumn + Only match from the beginning of the string - - - - - - - - - - Value column - - - mValueColumn - - - - - + + - Description column + Use completer - - - @@ -182,10 +189,11 @@ mOrderByValue mAllowMulti mNofColumns - mUseCompleter mEditExpression mFilterExpression - + + +