diff options
author | Liang Qi <liang.qi@qt.io> | 2017-05-07 13:07:34 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2017-05-07 13:08:18 +0200 |
commit | d1ea4813458b383e66ce4df69d1833b8b6a279c4 (patch) | |
tree | 3bdc16da993e5de56b669e6774fb0748075ddd90 /src/sql | |
parent | 1c87d4e1a1d0e1972f6dc85e55ea9be8a42797ba (diff) | |
parent | 0b1ec78c2d4871afcc89d5b046926b88f0819a7c (diff) |
Merge remote-tracking branch 'origin/5.9' into dev
Conflicts:
src/network/access/qnetworkreply.cpp
tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp
Change-Id: Iadf766269454087e69fb216fc3857d85b0ddfaad
Diffstat (limited to 'src/sql')
-rw-r--r-- | src/sql/models/qsqlrelationaldelegate.h | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/src/sql/models/qsqlrelationaldelegate.h b/src/sql/models/qsqlrelationaldelegate.h index 32c994363e..a689e88ba3 100644 --- a/src/sql/models/qsqlrelationaldelegate.h +++ b/src/sql/models/qsqlrelationaldelegate.h @@ -47,6 +47,7 @@ #include <QtWidgets/qitemdelegate.h> #include <QtWidgets/qlistview.h> #include <QtWidgets/qcombobox.h> +#include <QtSql/qsqldriver.h> #include <QtSql/qsqlrelationaltablemodel.h> QT_BEGIN_NAMESPACE @@ -54,6 +55,16 @@ QT_BEGIN_NAMESPACE class QSqlRelationalDelegate: public QItemDelegate { + static int fieldIndex(const QSqlTableModel *const model, + const QSqlDriver *const driver, + const QString &fieldName) + { + const QString stripped = driver->isIdentifierEscaped(fieldName, QSqlDriver::FieldName) + ? driver->stripDelimiters(fieldName, QSqlDriver::FieldName) + : fieldName; + return model->fieldIndex(stripped); + } + public: explicit QSqlRelationalDelegate(QObject *aParent = nullptr) @@ -71,10 +82,12 @@ QWidget *createEditor(QWidget *aParent, QSqlTableModel *childModel = sqlModel ? sqlModel->relationModel(index.column()) : nullptr; if (!childModel) return QItemDelegate::createEditor(aParent, option, index); + const QSqlDriver *const driver = childModel->database().driver(); QComboBox *combo = new QComboBox(aParent); combo->setModel(childModel); - combo->setModelColumn(childModel->fieldIndex(sqlModel->relation(index.column()).displayColumn())); + combo->setModelColumn(fieldIndex(childModel, driver, + sqlModel->relation(index.column()).displayColumn())); combo->installEventFilter(const_cast<QSqlRelationalDelegate *>(this)); return combo; @@ -92,10 +105,13 @@ void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex QItemDelegate::setModelData(editor, model, index); return; } + const QSqlDriver *const driver = childModel->database().driver(); int currentItem = combo->currentIndex(); - int childColIndex = childModel->fieldIndex(sqlModel->relation(index.column()).displayColumn()); - int childEditIndex = childModel->fieldIndex(sqlModel->relation(index.column()).indexColumn()); + int childColIndex = fieldIndex(childModel, driver, + sqlModel->relation(index.column()).displayColumn()); + int childEditIndex = fieldIndex(childModel, driver, + sqlModel->relation(index.column()).indexColumn()); sqlModel->setData(index, childModel->data(childModel->index(currentItem, childColIndex), Qt::DisplayRole), Qt::DisplayRole); |