7 Star 0 Fork 1

src-anolis-dde/qt5-qtbase-5.15

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
QTBUG-87781-Fix-QSFPM-not-emitting-dataChanged-when-source-model-is-set.patch 3.40 KB
一键复制 编辑 原始数据 按行查看 历史
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();
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/src-anolis-dde/qt5-qtbase-5.15.git
git@gitee.com:src-anolis-dde/qt5-qtbase-5.15.git
src-anolis-dde
qt5-qtbase-5.15
qt5-qtbase-5.15
a8.6

搜索帮助