summaryrefslogtreecommitdiffstats
path: root/src/sql
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2017-05-07 13:07:34 +0200
committerLiang Qi <liang.qi@qt.io>2017-05-07 13:08:18 +0200
commitd1ea4813458b383e66ce4df69d1833b8b6a279c4 (patch)
tree3bdc16da993e5de56b669e6774fb0748075ddd90 /src/sql
parent1c87d4e1a1d0e1972f6dc85e55ea9be8a42797ba (diff)
parent0b1ec78c2d4871afcc89d5b046926b88f0819a7c (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.h22
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);