summaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
authorStephen Kelly <stephen.kelly@kdab.com>2012-09-13 15:23:15 +0200
committerQt by Nokia <qt-info@nokia.com>2012-09-13 16:20:11 +0200
commitd7a15fbfd93fb566c7793596ea50d8786b9eb654 (patch)
tree06eb637c90dcfd7a0c9da615386c9eef78775991 /tests/auto
parent5c412fd74c9164f1e73a7287ca603295ce73bcf5 (diff)
Fix crash when invalidating a QSortFilterProxyModel
Task-number: QTBUG-27122 Change-Id: Ibca46b88442f4f92422d9b3182e4bbf25716a07f Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp59
1 files changed, 59 insertions, 0 deletions
diff --git a/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp b/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp
index 7f141bdab0..41188bcabf 100644
--- a/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp
+++ b/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp
@@ -146,6 +146,7 @@ private slots:
void moveSourceRows();
void hierarchyFilterInvalidation();
+ void simpleFilterInvalidation();
protected:
void buildHierarchy(const QStringList &data, QAbstractItemModel *model);
@@ -3582,6 +3583,64 @@ 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::qWaitForWindowExposed(&view);
+
+ proxy.setMode(true);
+ model.insertRow(0, new QStandardItem("extra"));
+}
+
QTEST_MAIN(tst_QSortFilterProxyModel)
#include "tst_qsortfilterproxymodel.moc"