代码拉取完成,页面将自动刷新
Index: qtbase-opensource-src/src/corelib/itemmodels/qsortfilterproxymodel.cpp
===================================================================
--- qtbase-opensource-src.orig/src/corelib/itemmodels/qsortfilterproxymodel.cpp
+++ qtbase-opensource-src/src/corelib/itemmodels/qsortfilterproxymodel.cpp
@@ -1564,6 +1564,7 @@ void QSortFilterProxyModelPrivate::_q_so
_q_clearMapping();
// All internal structures are deleted in clear()
q->endResetModel();
+ create_mapping(QModelIndex());
update_source_sort_column();
if (dynamic_sortfilter && update_source_sort_column())
sort();
@@ -2141,6 +2142,7 @@ void QSortFilterProxyModel::setSourceMod
connect(d->model, SIGNAL(modelReset()), this, SLOT(_q_sourceReset()));
endResetModel();
+ d->create_mapping(QModelIndex());
if (d->update_source_sort_column() && d->dynamic_sortfilter)
d->sort();
}
Index: qtbase-opensource-src/tests/auto/corelib/itemmodels/qsortfilterproxymodel_common/tst_qsortfilterproxymodel.cpp
===================================================================
--- qtbase-opensource-src.orig/tests/auto/corelib/itemmodels/qsortfilterproxymodel_common/tst_qsortfilterproxymodel.cpp
+++ qtbase-opensource-src/tests/auto/corelib/itemmodels/qsortfilterproxymodel_common/tst_qsortfilterproxymodel.cpp
@@ -2191,6 +2191,35 @@ void tst_QSortFilterProxyModel::changeSo
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;
Index: qtbase-opensource-src/tests/auto/corelib/itemmodels/qsortfilterproxymodel_common/tst_qsortfilterproxymodel.h
===================================================================
--- qtbase-opensource-src.orig/tests/auto/corelib/itemmodels/qsortfilterproxymodel_common/tst_qsortfilterproxymodel.h
+++ qtbase-opensource-src/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();
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。