summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib
diff options
context:
space:
mode:
authorWang ChunLin <wangchunlin@uniontech.com>2020-10-23 11:02:30 +0800
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2020-11-21 02:42:08 +0000
commit4796296ed6d7b05e2ba94e5a8a28c48350a3c492 (patch)
tree588a76fd49223e383b535b4a929f2c513e4ca6b0 /tests/auto/corelib
parent73e0a5a422f7c484a083c909e3b573429b7c3301 (diff)
Fix QSFPM not emitting dataChanged when source model is set
QSortFilterProxyModel did not emit dataChanged when calling setSourceModel() after modifying the source model. QSortFilterProxyModel::setSourceModel and QSortFilterProxyModelPrivate::_q_sourceReset(), _q_clearMapping is called to delete the source_index_mapping. They also need to call create_mapping function to re-create it. Fixes: QTBUG-87781 Change-Id: Idbe34696c9d3a2fbf354b653c870bac61378811d Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> (cherry picked from commit 8455bfee76ed3f1bd3bba8bd3688a7afa94ae0bb) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'tests/auto/corelib')
-rw-r--r--tests/auto/corelib/itemmodels/qsortfilterproxymodel_common/tst_qsortfilterproxymodel.cpp29
-rw-r--r--tests/auto/corelib/itemmodels/qsortfilterproxymodel_common/tst_qsortfilterproxymodel.h1
2 files changed, 30 insertions, 0 deletions
diff --git a/tests/auto/corelib/itemmodels/qsortfilterproxymodel_common/tst_qsortfilterproxymodel.cpp b/tests/auto/corelib/itemmodels/qsortfilterproxymodel_common/tst_qsortfilterproxymodel.cpp
index 7f9a996136..729c563981 100644
--- a/tests/auto/corelib/itemmodels/qsortfilterproxymodel_common/tst_qsortfilterproxymodel.cpp
+++ b/tests/auto/corelib/itemmodels/qsortfilterproxymodel_common/tst_qsortfilterproxymodel.cpp
@@ -2191,6 +2191,35 @@ void tst_QSortFilterProxyModel::changeSourceDataForwardsRoles_qtbug35440()
QCOMPARE(spy.at(1).at(2).value<QVector<int> >(), expectedChangedRoles);
}
+void tst_QSortFilterProxyModel::changeSourceDataProxySendDataChanged_qtbug87781()
+{
+ QStandardItemModel baseModel;
+ QSortFilterProxyModel proxyModelBefore;
+ QSortFilterProxyModel proxyModelAfter;
+
+ QSignalSpy baseDataChangedSpy(&baseModel, &QStandardItemModel::dataChanged);
+ QSignalSpy beforeDataChangedSpy(&proxyModelBefore, &QSortFilterProxyModel::dataChanged);
+ QSignalSpy afterDataChangedSpy(&proxyModelAfter, &QSortFilterProxyModel::dataChanged);
+
+ QVERIFY(baseDataChangedSpy.isValid());
+ QVERIFY(beforeDataChangedSpy.isValid());
+ QVERIFY(afterDataChangedSpy.isValid());
+
+ proxyModelBefore.setSourceModel(&baseModel);
+ baseModel.insertRows(0, 1);
+ baseModel.insertColumns(0, 1);
+ proxyModelAfter.setSourceModel(&baseModel);
+
+ QCOMPARE(baseDataChangedSpy.size(), 0);
+ QCOMPARE(beforeDataChangedSpy.size(), 0);
+ QCOMPARE(afterDataChangedSpy.size(), 0);
+
+ baseModel.setData(baseModel.index(0, 0), QStringLiteral("new data"), Qt::DisplayRole);
+ QCOMPARE(baseDataChangedSpy.size(), 1);
+ QCOMPARE(beforeDataChangedSpy.size(), 1);
+ QCOMPARE(afterDataChangedSpy.size(), 1);
+}
+
void tst_QSortFilterProxyModel::sortFilterRole()
{
QStandardItemModel model;
diff --git a/tests/auto/corelib/itemmodels/qsortfilterproxymodel_common/tst_qsortfilterproxymodel.h b/tests/auto/corelib/itemmodels/qsortfilterproxymodel_common/tst_qsortfilterproxymodel.h
index 71662bda07..44693d4fd2 100644
--- a/tests/auto/corelib/itemmodels/qsortfilterproxymodel_common/tst_qsortfilterproxymodel.h
+++ b/tests/auto/corelib/itemmodels/qsortfilterproxymodel_common/tst_qsortfilterproxymodel.h
@@ -90,6 +90,7 @@ private slots:
void changeSourceData();
void changeSourceDataKeepsStableSorting_qtbug1548();
void changeSourceDataForwardsRoles_qtbug35440();
+ void changeSourceDataProxySendDataChanged_qtbug87781();
void resortingDoesNotBreakTreeModels();
void dynamicFilterWithoutSort();
void sortFilterRole();