diff options
Diffstat (limited to 'src/sql/models')
-rw-r--r-- | src/sql/models/qsqlrelationaldelegate.h | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/sql/models/qsqlrelationaldelegate.h b/src/sql/models/qsqlrelationaldelegate.h index 0af87f64ae..e8ae5a229d 100644 --- a/src/sql/models/qsqlrelationaldelegate.h +++ b/src/sql/models/qsqlrelationaldelegate.h @@ -55,7 +55,7 @@ QT_REQUIRE_CONFIG(sqlmodel); #endif #include <QtSql/qsqldriver.h> #include <QtSql/qsqlrelationaltablemodel.h> - +#include <QtCore/qmetaobject.h> QT_BEGIN_NAMESPACE @@ -99,6 +99,27 @@ QWidget *createEditor(QWidget *aParent, return combo; } + void setEditorData(QWidget *editor, const QModelIndex &index) const override + { + if (!index.isValid()) + return; + + if (qobject_cast<QComboBox *>(editor)) { + // Taken from QItemDelegate::setEditorData() as we need + // to present the DisplayRole and not the EditRole which + // is the id reference to the related model + QVariant v = index.data(Qt::DisplayRole); + QByteArray n = editor->metaObject()->userProperty().name(); + if (!n.isEmpty()) { + if (!v.isValid()) + v = QVariant(editor->property(n).userType(), nullptr); + editor->setProperty(n, v); + return; + } + } + QItemDelegate::setEditorData(editor, index); + } + void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override { if (!index.isValid()) |