allow to specify data role in QgsSettingsStringComboBoxWrapper

This commit is contained in:
Denis Rouzaud 2025-07-25 10:22:43 +02:00 committed by Nyall Dawson
parent 90528a1937
commit ef23a603cf
4 changed files with 19 additions and 2 deletions

View File

@ -160,6 +160,12 @@ Constructor of the wrapper for a given ``setting`` and its widget
%Docstring %Docstring
Constructor of the wrapper for a given ``setting`` and its widget Constructor of the wrapper for a given ``setting`` and its widget
``editor`` ``editor``
%End
QgsSettingsStringComboBoxWrapper( QWidget *editor, const QgsSettingsEntryBase *setting, Mode mode, int role, const QStringList &dynamicKeyPartList = QStringList() );
%Docstring
Constructor of the wrapper for a given ``setting`` and its widget
``editor``
%End %End
virtual QgsSettingsEditorWidgetWrapper *createWrapper( QObject *parent = 0 ) const; virtual QgsSettingsEditorWidgetWrapper *createWrapper( QObject *parent = 0 ) const;

View File

@ -160,6 +160,12 @@ Constructor of the wrapper for a given ``setting`` and its widget
%Docstring %Docstring
Constructor of the wrapper for a given ``setting`` and its widget Constructor of the wrapper for a given ``setting`` and its widget
``editor`` ``editor``
%End
QgsSettingsStringComboBoxWrapper( QWidget *editor, const QgsSettingsEntryBase *setting, Mode mode, int role, const QStringList &dynamicKeyPartList = QStringList() );
%Docstring
Constructor of the wrapper for a given ``setting`` and its widget
``editor``
%End %End
virtual QgsSettingsEditorWidgetWrapper *createWrapper( QObject *parent = 0 ) const; virtual QgsSettingsEditorWidgetWrapper *createWrapper( QObject *parent = 0 ) const;

View File

@ -94,7 +94,7 @@ bool QgsSettingsStringComboBoxWrapper::setWidgetValue( const QString &value ) co
{ {
if ( mEditor ) if ( mEditor )
{ {
int idx = mMode == Mode::Data ? mEditor->findData( value ) : mEditor->findText( value ); int idx = mMode == Mode::Data ? mEditor->findData( value, mDataRole ) : mEditor->findText( value );
if ( idx >= 0 ) if ( idx >= 0 )
{ {
mEditor->setCurrentIndex( idx ); mEditor->setCurrentIndex( idx );
@ -140,7 +140,7 @@ QString QgsSettingsStringComboBoxWrapper::valueFromWidget() const
{ {
if ( mEditor ) if ( mEditor )
{ {
return mMode == Mode::Data ? mEditor->currentData().toString() : mEditor->currentText(); return mMode == Mode::Data ? mEditor->currentData( mDataRole ).toString() : mEditor->currentText();
} }
else else
{ {

View File

@ -178,6 +178,10 @@ class GUI_EXPORT QgsSettingsStringComboBoxWrapper : public QgsSettingsEditorWidg
QgsSettingsStringComboBoxWrapper( QWidget *editor, const QgsSettingsEntryBase *setting, Mode mode, const QStringList &dynamicKeyPartList = QStringList() ) QgsSettingsStringComboBoxWrapper( QWidget *editor, const QgsSettingsEntryBase *setting, Mode mode, const QStringList &dynamicKeyPartList = QStringList() )
: QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryString, QComboBox, QString>( editor ), mMode( mode ) { configureEditor( editor, setting, dynamicKeyPartList ); } : QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryString, QComboBox, QString>( editor ), mMode( mode ) { configureEditor( editor, setting, dynamicKeyPartList ); }
//! Constructor of the wrapper for a given \a setting and its widget \a editor
QgsSettingsStringComboBoxWrapper( QWidget *editor, const QgsSettingsEntryBase *setting, Mode mode, int role, const QStringList &dynamicKeyPartList = QStringList() )
: QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryString, QComboBox, QString>( editor ), mMode( mode ), mDataRole( role ) { configureEditor( editor, setting, dynamicKeyPartList ); }
QgsSettingsEditorWidgetWrapper *createWrapper( QObject *parent = nullptr ) const override { return new QgsSettingsStringComboBoxWrapper( parent ); } QgsSettingsEditorWidgetWrapper *createWrapper( QObject *parent = nullptr ) const override { return new QgsSettingsStringComboBoxWrapper( parent ); }
QString id() const override; QString id() const override;
@ -192,6 +196,7 @@ class GUI_EXPORT QgsSettingsStringComboBoxWrapper : public QgsSettingsEditorWidg
private: private:
Mode mMode = Mode::Text; Mode mMode = Mode::Text;
int mDataRole = Qt::UserRole; // Default to UserRole, can be changed in the constructor
}; };