diff --git a/src/corelib/itemmodels/qabstractitemmodel.cpp b/src/corelib/itemmodels/qabstractitemmodel.cpp index 416bd4f6b43..df944296293 100644 --- a/src/corelib/itemmodels/qabstractitemmodel.cpp +++ b/src/corelib/itemmodels/qabstractitemmodel.cpp @@ -3401,7 +3401,14 @@ void QAbstractItemModel::endMoveColumns() */ void QAbstractItemModel::beginResetModel() { + Q_D(QAbstractItemModel); + if (d->resetting) { + qWarning() << "beginResetModel called on" << this << "without calling endResetModel first"; + // Warn, but don't return early in case user code relies on the incorrect behavior. + } + qCDebug(lcReset) << "beginResetModel called; about to emit modelAboutToBeReset"; + d->resetting = true; emit modelAboutToBeReset(QPrivateSignal()); } @@ -3419,9 +3426,15 @@ void QAbstractItemModel::beginResetModel() void QAbstractItemModel::endResetModel() { Q_D(QAbstractItemModel); + if (!d->resetting) { + qWarning() << "endResetModel called on" << this << "without calling beginResetModel first"; + // Warn, but don't return early in case user code relies on the incorrect behavior. + } + qCDebug(lcReset) << "endResetModel called; about to emit modelReset"; d->invalidatePersistentIndexes(); resetInternalData(); + d->resetting = false; emit modelReset(QPrivateSignal()); } diff --git a/src/corelib/itemmodels/qabstractitemmodel_p.h b/src/corelib/itemmodels/qabstractitemmodel_p.h index e34dc3262cf..c2113fde9aa 100644 --- a/src/corelib/itemmodels/qabstractitemmodel_p.h +++ b/src/corelib/itemmodels/qabstractitemmodel_p.h @@ -45,6 +45,8 @@ class Q_CORE_EXPORT QAbstractItemModelPrivate : public QObjectPrivate QAbstractItemModelPrivate(); ~QAbstractItemModelPrivate(); + static const QAbstractItemModelPrivate *get(const QAbstractItemModel *model) { return model->d_func(); } + void removePersistentIndexData(QPersistentModelIndexData *data); void movePersistentIndexes(const QList &indexes, int change, const QModelIndex &parent, Qt::Orientation orientation); @@ -115,6 +117,8 @@ class Q_CORE_EXPORT QAbstractItemModelPrivate : public QObjectPrivate void insertMultiAtEnd(const QModelIndex& key, QPersistentModelIndexData *data); } persistent; + bool resetting = false; + static const QHash &defaultRoleNames(); static bool isVariantLessThan(const QVariant &left, const QVariant &right, Qt::CaseSensitivity cs = Qt::CaseSensitive, bool isLocaleAware = false);