diff options
author | Stephen Kelly <steveire@gmail.com> | 2010-01-06 09:48:25 (GMT) |
---|---|---|
committer | Olivier Goffart <ogoffart@trolltech.com> | 2010-01-06 09:48:25 (GMT) |
commit | d149a3faca9b97ce806249bc7ef73fe2f59589d5 (patch) | |
tree | 65a4f6006c240b5e048daf235043cfcff61734f3 /tests/auto/modeltest | |
parent | dbc4a07327e0c306eb84a65ae7fa98bdb36c6ad0 (diff) | |
download | Qt-d149a3faca9b97ce806249bc7ef73fe2f59589d5.zip Qt-d149a3faca9b97ce806249bc7ef73fe2f59589d5.tar.gz Qt-d149a3faca9b97ce806249bc7ef73fe2f59589d5.tar.bz2 |
Don't call invalidate when resetting the QSortFilterProxyModel.
The invalidate connection is made before connecting the source model,
which means it gets called first.
If a second proxy model is used with it, the sourceLayoutAboutToBeChanged
of the second proxy is therefore called before its sourceReset slot, but
after the persistent indexes of the first model have been invalidated.
The invalidate call is not needed because clear_mappings is called
when the source model is reset anyway.
Merge-request: 416
Reviewed-by: Olivier Goffart <ogoffart@trolltech.com>
Diffstat (limited to 'tests/auto/modeltest')
-rw-r--r-- | tests/auto/modeltest/dynamictreemodel.cpp | 3 | ||||
-rw-r--r-- | tests/auto/modeltest/tst_modeltest.cpp | 30 |
2 files changed, 30 insertions, 3 deletions
diff --git a/tests/auto/modeltest/dynamictreemodel.cpp b/tests/auto/modeltest/dynamictreemodel.cpp index 24d3ab3..b572eb1 100644 --- a/tests/auto/modeltest/dynamictreemodel.cpp +++ b/tests/auto/modeltest/dynamictreemodel.cpp @@ -160,10 +160,11 @@ QVariant DynamicTreeModel::data(const QModelIndex &index, int role) const void DynamicTreeModel::clear() { + beginResetModel(); m_items.clear(); m_childItems.clear(); nextId = 1; - reset(); + endResetModel(); } diff --git a/tests/auto/modeltest/tst_modeltest.cpp b/tests/auto/modeltest/tst_modeltest.cpp index 262b966..8beeb38 100644 --- a/tests/auto/modeltest/tst_modeltest.cpp +++ b/tests/auto/modeltest/tst_modeltest.cpp @@ -67,6 +67,7 @@ private slots: void standardItemModel(); void testInsertThroughProxy(); void moveSourceItems(); + void testResetThroughProxy(); }; @@ -225,8 +226,9 @@ public slots: void storePersistent() { - m_persistentSourceIndexes.clear(); - m_persistentProxyIndexes.clear(); + foreach(const QModelIndex &idx, m_persistentProxyIndexes) + Q_ASSERT(idx.isValid()); // This is called from layoutAboutToBeChanged. Persistent indexes should be valid + Q_ASSERT(m_proxy->persistent().isEmpty()); storePersistent(QModelIndex()); Q_ASSERT(!m_proxy->persistent().isEmpty()); @@ -243,6 +245,8 @@ public slots: QModelIndex updatedSource = m_persistentSourceIndexes.at(row); QCOMPARE(m_proxy->mapToSource(updatedProxy), updatedSource); } + m_persistentSourceIndexes.clear(); + m_persistentProxyIndexes.clear(); } private: @@ -278,6 +282,28 @@ void tst_ModelTest::moveSourceItems() moveCommand->doCommand(); } +void tst_ModelTest::testResetThroughProxy() +{ + DynamicTreeModel *model = new DynamicTreeModel(this); + + ModelInsertCommand *insertCommand = new ModelInsertCommand(model, this); + insertCommand->setStartRow(0); + insertCommand->setEndRow(2); + insertCommand->doCommand(); + + QPersistentModelIndex persistent = model->index(0, 0); + + AccessibleProxyModel *proxy = new AccessibleProxyModel(this); + proxy->setSourceModel(model); + + ObservingObject observer(proxy); + observer.storePersistent(); + + ModelResetCommand *resetCommand = new ModelResetCommand(model, this); + resetCommand->setNumCols(0); + resetCommand->doCommand(); +} + QTEST_MAIN(tst_ModelTest) #include "tst_modeltest.moc" |