diff --git a/src/widgets/itemviews/qdatawidgetmapper.cpp b/src/widgets/itemviews/qdatawidgetmapper.cpp index 8b9d6f9d6c..4158e00dfc 100644 --- a/src/widgets/itemviews/qdatawidgetmapper.cpp +++ b/src/widgets/itemviews/qdatawidgetmapper.cpp @@ -762,10 +762,11 @@ void QDataWidgetMapper::clearMapping() { Q_D(QDataWidgetMapper); - while (!d->widgetMap.isEmpty()) { - QWidget *w = d->widgetMap.takeLast().widget; - if (w) - w->removeEventFilter(d->delegate); + QList copy; + d->widgetMap.swap(copy); // a C++98 move + for (std::reverse_iterator::const_iterator> it(copy.cend()), end(copy.cbegin()); it != end; ++it) { + if (it->widget) + it->widget->removeEventFilter(d->delegate); } }