diff options
Diffstat (limited to 'src/sql/models/qsqlrelationaltablemodel.cpp')
-rw-r--r-- | src/sql/models/qsqlrelationaltablemodel.cpp | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/src/sql/models/qsqlrelationaltablemodel.cpp b/src/sql/models/qsqlrelationaltablemodel.cpp index 29beefb94db..1595ff03651 100644 --- a/src/sql/models/qsqlrelationaltablemodel.cpp +++ b/src/sql/models/qsqlrelationaltablemodel.cpp @@ -105,7 +105,7 @@ struct QRelation public: Q_DISABLE_COPY(QRelation) // QRelatedTableModel stores a pointer to this class QRelation() = default; - void init(QSqlRelationalTableModel *parent, const QSqlRelation &relation); + void init(QSqlRelationalTableModel *parent, const QSqlRelation &relation, int column); void populateModel(); @@ -122,6 +122,7 @@ struct QRelation private: QSqlRelationalTableModel *m_parent = nullptr; + int col = -1; bool m_dictInitialized = false; }; @@ -139,11 +140,12 @@ private: Note: population of the model and dictionary are kept separate from initialization, and are populated on an as needed basis. */ -void QRelation::init(QSqlRelationalTableModel *parent, const QSqlRelation &relation) +void QRelation::init(QSqlRelationalTableModel *parent, const QSqlRelation &relation, int column) { Q_ASSERT(parent != nullptr); m_parent = parent; rel = relation; + col = column; } void QRelation::populateModel() @@ -156,6 +158,19 @@ void QRelation::populateModel() model = new QRelatedTableModel(this, m_parent, m_parent->database()); model->setTable(rel.tableName()); model->select(); + QObject::connect(model, &QAbstractItemModel::dataChanged, model, [&](const QModelIndex &tl, const QModelIndex &br) + { + if (tl.column() >= col && br.column() <= col) + clearDictionary(); + }); + QObject::connect(model, &QAbstractItemModel::rowsRemoved, model, [&]() + { + clearDictionary(); + }); + QObject::connect(model, &QAbstractItemModel::rowsInserted, model, [&]() + { + clearDictionary(); + }); } } @@ -478,7 +493,7 @@ void QSqlRelationalTableModel::setRelation(int column, const QSqlRelation &relat for (auto i = oldSize; i < d->relations.size(); ++i) d->relations[i] = QSharedPointer<QRelation>::create(); } - d->relations.at(column)->init(this, relation); + d->relations.at(column)->init(this, relation, column); } /*! |