diff options
Diffstat (limited to 'src/corelib/itemmodels/qabstractitemmodel.cpp')
-rw-r--r-- | src/corelib/itemmodels/qabstractitemmodel.cpp | 21 |
1 files changed, 6 insertions, 15 deletions
diff --git a/src/corelib/itemmodels/qabstractitemmodel.cpp b/src/corelib/itemmodels/qabstractitemmodel.cpp index e816add91d..75e13ff994 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; } } @@ -3959,7 +3950,7 @@ bool QAbstractListModel::dropMimeData(const QMimeData *data, Qt::DropAction acti /*! \internal - QHash::insertMulti insert the value before the old value. and find() return the new value. + QMultiHash::insert inserts the value before the old value. and find() return the new value. We need insertMultiAtEnd because we don't want to overwrite the old one, which should be removed later There should be only one instance QPersistentModelIndexData per index, but in some intermediate state there may be @@ -3969,9 +3960,9 @@ bool QAbstractListModel::dropMimeData(const QMimeData *data, Qt::DropAction acti */ void QAbstractItemModelPrivate::Persistent::insertMultiAtEnd(const QModelIndex& key, QPersistentModelIndexData *data) { - QHash<QModelIndex,QPersistentModelIndexData *>::iterator newIt = - indexes.insertMulti(key, data); - QHash<QModelIndex,QPersistentModelIndexData *>::iterator it = newIt + 1; + QHash<QModelIndex,QPersistentModelIndexData *>::iterator newIt = indexes.insert(key, data); + QHash<QModelIndex,QPersistentModelIndexData *>::iterator it = newIt; + ++it; while (it != indexes.end() && it.key() == key) { qSwap(*newIt,*it); newIt = it; |