summaryrefslogtreecommitdiffstats
path: root/src/sql/models/qsqlrelationaltablemodel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/sql/models/qsqlrelationaltablemodel.cpp')
-rw-r--r--src/sql/models/qsqlrelationaltablemodel.cpp21
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);
}
/*!