diff options
-rw-r--r-- | src/corelib/itemmodels/qabstractitemmodel.cpp | 13 | ||||
-rw-r--r-- | src/corelib/itemmodels/qabstractitemmodel_p.h | 5 | ||||
-rw-r--r-- | src/widgets/itemviews/qdirmodel.cpp | 3 |
3 files changed, 5 insertions, 16 deletions
diff --git a/src/corelib/itemmodels/qabstractitemmodel.cpp b/src/corelib/itemmodels/qabstractitemmodel.cpp index e816add91d..af08867dd4 100644 --- a/src/corelib/itemmodels/qabstractitemmodel.cpp +++ b/src/corelib/itemmodels/qabstractitemmodel.cpp @@ -77,7 +77,7 @@ void QPersistentModelIndexData::destroy(QPersistentModelIndexData *data) { Q_ASSERT(data); Q_ASSERT(data->ref.load() == 0); - QAbstractItemModel *model = const_cast<QAbstractItemModel *>(data->model); + QAbstractItemModel *model = const_cast<QAbstractItemModel *>(data->index.model()); // a valid persistent model index with a null model pointer can only happen if the model was destroyed if (model) { QAbstractItemModelPrivate *p = model->d_func(); @@ -512,10 +512,8 @@ QAbstractItemModel *QAbstractItemModelPrivate::staticEmptyModel() void QAbstractItemModelPrivate::invalidatePersistentIndexes() { - for (QPersistentModelIndexData *data : qAsConst(persistent.indexes)) { + for (QPersistentModelIndexData *data : qAsConst(persistent.indexes)) data->index = QModelIndex(); - data->model = 0; - } persistent.indexes.clear(); } @@ -530,7 +528,6 @@ void QAbstractItemModelPrivate::invalidatePersistentIndex(const QModelIndex &ind QPersistentModelIndexData *data = *it; persistent.indexes.erase(it); data->index = QModelIndex(); - data->model = 0; } } @@ -863,7 +860,6 @@ void QAbstractItemModelPrivate::rowsRemoved(const QModelIndex &parent, QPersistentModelIndexData *data = *it; persistent.indexes.erase(persistent.indexes.constFind(data->index)); data->index = QModelIndex(); - data->model = 0; } } @@ -958,7 +954,6 @@ void QAbstractItemModelPrivate::columnsRemoved(const QModelIndex &parent, QPersistentModelIndexData *data = *it; persistent.indexes.erase(persistent.indexes.constFind(data->index)); data->index = QModelIndex(); - data->model = 0; } } @@ -3294,8 +3289,6 @@ void QAbstractItemModel::changePersistentIndex(const QModelIndex &from, const QM data->index = to; if (to.isValid()) d->persistent.insertMultiAtEnd(to, data); - else - data->model = 0; } } @@ -3328,8 +3321,6 @@ void QAbstractItemModel::changePersistentIndexList(const QModelIndexList &from, data->index = to.at(i); if (data->index.isValid()) toBeReinserted << data; - else - data->model = 0; } } diff --git a/src/corelib/itemmodels/qabstractitemmodel_p.h b/src/corelib/itemmodels/qabstractitemmodel_p.h index 12fd93d217..94f1b41d50 100644 --- a/src/corelib/itemmodels/qabstractitemmodel_p.h +++ b/src/corelib/itemmodels/qabstractitemmodel_p.h @@ -65,11 +65,10 @@ QT_REQUIRE_CONFIG(itemmodel); class QPersistentModelIndexData { public: - QPersistentModelIndexData() : model(0) {} - QPersistentModelIndexData(const QModelIndex &idx) : index(idx), model(idx.model()) {} + QPersistentModelIndexData() {} + QPersistentModelIndexData(const QModelIndex &idx) : index(idx) {} QModelIndex index; QAtomicInt ref; - const QAbstractItemModel *model; static QPersistentModelIndexData *create(const QModelIndex &index); static void destroy(QPersistentModelIndexData *data); }; diff --git a/src/widgets/itemviews/qdirmodel.cpp b/src/widgets/itemviews/qdirmodel.cpp index 78fc623fb5..b94c31fb42 100644 --- a/src/widgets/itemviews/qdirmodel.cpp +++ b/src/widgets/itemviews/qdirmodel.cpp @@ -1252,11 +1252,10 @@ void QDirModelPrivate::restorePersistentIndexes() for (const SavedPersistent &sp : qAsConst(savedPersistent)) { QPersistentModelIndexData *data = sp.data; QModelIndex idx = q->index(sp.path, sp.column); - if (idx != data->index || data->model == 0) { + if (idx != data->index || data->index.model() == nullptr) { //data->model may be equal to 0 if the model is getting destroyed persistent.indexes.remove(data->index); data->index = idx; - data->model = q; if (idx.isValid()) persistent.indexes.insert(idx, data); } |