diff --git a/src/corelib/itemmodels/qabstractproxymodel.cpp b/src/corelib/itemmodels/qabstractproxymodel.cpp index c0321ee282d..2d1df46b451 100644 --- a/src/corelib/itemmodels/qabstractproxymodel.cpp +++ b/src/corelib/itemmodels/qabstractproxymodel.cpp @@ -159,7 +159,8 @@ void QAbstractProxyModel::setSourceModel(QAbstractItemModel *sourceModel) d->model.removeBindingUnlessInWrapper(); // Special case to handle nullptr models. Otherwise we will have unwanted // notifications. - if (!sourceModel && d->model == QAbstractItemModelPrivate::staticEmptyModel()) + const QAbstractItemModel *currentModel = d->model.valueBypassingBindings(); + if (!sourceModel && currentModel == QAbstractItemModelPrivate::staticEmptyModel()) return; static const struct { const char *signalName; @@ -176,16 +177,16 @@ void QAbstractProxyModel::setSourceModel(QAbstractItemModel *sourceModel) // clang-format on }; - if (sourceModel != d->model) { - if (d->model) { + if (sourceModel != currentModel) { + if (currentModel) { for (const auto &c : connectionTable) - disconnect(d->model, c.signalName, this, c.slotName); + disconnect(currentModel, c.signalName, this, c.slotName); } if (sourceModel) { d->model.setValueBypassingBindings(sourceModel); for (const auto &c : connectionTable) - connect(d->model, c.signalName, this, c.slotName); + connect(sourceModel, c.signalName, this, c.slotName); } else { d->model.setValueBypassingBindings(QAbstractItemModelPrivate::staticEmptyModel()); } diff --git a/tests/auto/corelib/itemmodels/qabstractproxymodel/tst_qabstractproxymodel.cpp b/tests/auto/corelib/itemmodels/qabstractproxymodel/tst_qabstractproxymodel.cpp index 3bea468e5b9..3136c1f24f3 100644 --- a/tests/auto/corelib/itemmodels/qabstractproxymodel/tst_qabstractproxymodel.cpp +++ b/tests/auto/corelib/itemmodels/qabstractproxymodel/tst_qabstractproxymodel.cpp @@ -610,7 +610,7 @@ void tst_QAbstractProxyModel::sourceModelBinding() SubQAbstractProxyModel proxy; QStandardItemModel model1; QStandardItemModel model2; - QTestPrivate::testReadWritePropertyBasics( + QTestPrivate::testReadWritePropertyBasics( proxy, &model1, &model2, "sourceModel"); if (QTest::currentTestFailed()) { qDebug("Failed model - model test"); @@ -618,7 +618,7 @@ void tst_QAbstractProxyModel::sourceModelBinding() } proxy.setSourceModel(&model2); - QTestPrivate::testReadWritePropertyBasics( + QTestPrivate::testReadWritePropertyBasics( proxy, &model1, nullptr, "sourceModel"); if (QTest::currentTestFailed()) { qDebug("Failed model - nullptr test"); @@ -626,7 +626,7 @@ void tst_QAbstractProxyModel::sourceModelBinding() } proxy.setSourceModel(&model1); - QTestPrivate::testReadWritePropertyBasics( + QTestPrivate::testReadWritePropertyBasics( proxy, nullptr, &model2, "sourceModel"); if (QTest::currentTestFailed()) { qDebug("Failed nullptr - model test");