From 9af77d214a3e01bf1ce34384f84ac1c08e6be2fe Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Tue, 24 Jan 2012 16:48:22 +0100 Subject: [PATCH] Deprecate QAbstractItemModel::reset(). It is broken in most uses because it emits modelAboutToBeReset() after actually resetting the internal data instead of before. That is, usually it is used like this: myData.clear(); reset(); Which should be beginResetModel(); myData.clear(); endResetModel(); Change-Id: I7b00a1e40c4915930944340764074efc29faaf5a Reviewed-by: Olivier Goffart --- src/corelib/itemmodels/qabstractitemmodel.cpp | 9 ++------- src/corelib/itemmodels/qabstractitemmodel.h | 9 ++++++++- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/corelib/itemmodels/qabstractitemmodel.cpp b/src/corelib/itemmodels/qabstractitemmodel.cpp index 50a63e28da..a6446b2bb5 100644 --- a/src/corelib/itemmodels/qabstractitemmodel.cpp +++ b/src/corelib/itemmodels/qabstractitemmodel.cpp @@ -2927,19 +2927,14 @@ void QAbstractItemModel::endMoveColumns() } /*! + \obsolete + Resets the model to its original state in any attached views. \note Use beginResetModel() and endResetModel() instead whenever possible. Use this method only if there is no way to call beginResetModel() before invalidating the model. Otherwise it could lead to unexpected behaviour, especially when used with proxy models. */ -void QAbstractItemModel::reset() -{ - Q_D(QAbstractItemModel); - emit modelAboutToBeReset(); - d->invalidatePersistentIndexes(); - emit modelReset(); -} /*! Begins a model reset operation. diff --git a/src/corelib/itemmodels/qabstractitemmodel.h b/src/corelib/itemmodels/qabstractitemmodel.h index e5e6d26e93..36de591b8a 100644 --- a/src/corelib/itemmodels/qabstractitemmodel.h +++ b/src/corelib/itemmodels/qabstractitemmodel.h @@ -306,7 +306,14 @@ protected: bool beginMoveColumns(const QModelIndex &sourceParent, int sourceFirst, int sourceLast, const QModelIndex &destinationParent, int destinationColumn); void endMoveColumns(); - void reset(); + +#if QT_DEPRECATED_SINCE(5,0) + QT_DEPRECATED void reset() + { + beginResetModel(); + endResetModel(); + } +#endif void beginResetModel(); void endResetModel();