diff options
author | Stephen Kelly <stephen.kelly@kdab.com> | 2012-09-14 13:42:34 (GMT) |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-09-14 18:16:44 (GMT) |
commit | 989e6c5ee6f3e38b24632ec5caf49c5b03d17aed (patch) | |
tree | 800318a2f552fb1f16ff3ba7f1ffd13057db0d61 /tests | |
parent | ecc432a5b7ae269220f86c6f0b3dd364f8643191 (diff) | |
download | Qt-989e6c5ee6f3e38b24632ec5caf49c5b03d17aed.zip Qt-989e6c5ee6f3e38b24632ec5caf49c5b03d17aed.tar.gz Qt-989e6c5ee6f3e38b24632ec5caf49c5b03d17aed.tar.bz2 |
Fix crash when invalidating a QSortFilterProxyModel
Backport of d7a15fbfd93fb566c7793596ea50d8786b9eb654 from qtbase.
Task-number: QTBUG-27122
Change-Id: I0b1eda292fd9648e6f08629f7a069b66bb8b59e8
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/tests/auto/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp b/tests/auto/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp index 8ab5098..d0887fc 100644 --- a/tests/auto/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp +++ b/tests/auto/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp @@ -152,6 +152,7 @@ private slots: void testResetInternalData(); void filteredColumns(); void hierarchyFilterInvalidation(); + void simpleFilterInvalidation(); protected: void buildHierarchy(const QStringList &data, QAbstractItemModel *model); @@ -3475,5 +3476,65 @@ void tst_QSortFilterProxyModel::hierarchyFilterInvalidation() proxy.setMode(true); } + +class FilterProxy2 : public QSortFilterProxyModel +{ + Q_OBJECT +public: + FilterProxy2(QObject *parent = 0) + : QSortFilterProxyModel(parent), + mode(false) + { + + } + +public slots: + void setMode(bool on) + { + mode = on; + invalidateFilter(); + } + +protected: + virtual bool filterAcceptsRow ( int source_row, const QModelIndex & source_parent ) const + { + if (source_parent.isValid()) { + return true; + } else { + if (0 == source_row) { + return true; + } else { + return !mode; + } + } + } + +private: + bool mode; +}; + +void tst_QSortFilterProxyModel::simpleFilterInvalidation() +{ + QStandardItemModel model; + for (int i = 0; i < 2; ++i) { + QStandardItem *child = new QStandardItem(QString("Row %1").arg(i)); + child->appendRow(new QStandardItem("child")); + model.appendRow(child); + } + + FilterProxy2 proxy; + proxy.setSourceModel(&model); + + QTreeView view; + view.setModel(&proxy); + + view.show(); + QTest::qWaitForWindowShown(&view); + + proxy.setMode(true); + model.insertRow(0, new QStandardItem("extra")); +} + + QTEST_MAIN(tst_QSortFilterProxyModel) #include "tst_qsortfilterproxymodel.moc" |