From 2380ac105d09f21a881118af400c8e3071f027a1 Mon Sep 17 00:00:00 2001 From: David Faure Date: Tue, 2 Aug 2016 14:38:18 +0200 Subject: [PATCH] KRearrangeColumnsProxyModel: fix assert in index(0, 0) on empty model REVIEW: 128578 --- autotests/krearrangecolumnsproxymodeltest.cpp | 17 +++++++++++++++++ src/krearrangecolumnsproxymodel.cpp | 4 +++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/autotests/krearrangecolumnsproxymodeltest.cpp b/autotests/krearrangecolumnsproxymodeltest.cpp index 056b2f0..e1674ca 100644 --- a/autotests/krearrangecolumnsproxymodeltest.cpp +++ b/autotests/krearrangecolumnsproxymodeltest.cpp @@ -78,6 +78,23 @@ private Q_SLOTS: QCOMPARE(pm.columnCount(), 0); } + void shouldShowNothingIfNoRows() + { + // Given a rearrange-columns proxy + KRearrangeColumnsProxyModel pm; + pm.setSourceColumns(QVector() << 2 << 3 << 1 << 0); + + // When using that proxy on top of an empty source model + QStandardItemModel sourceModel; + sourceModel.setColumnCount(4); + pm.setSourceModel(&sourceModel); + + // Then the proxy should show nothing + QCOMPARE(pm.rowCount(), 0); + QCOMPARE(pm.columnCount(), 4); + QCOMPARE(pm.index(0, 0), pm.index(0, 0)); // like QAbstractItemView::setModel does in a Q_ASSERT_X + } + void shouldRearrangeColumns() { // Given a rearrange-columns proxy diff --git a/src/krearrangecolumnsproxymodel.cpp b/src/krearrangecolumnsproxymodel.cpp index 72e4f14..267b792 100644 --- a/src/krearrangecolumnsproxymodel.cpp +++ b/src/krearrangecolumnsproxymodel.cpp @@ -69,7 +69,9 @@ QModelIndex KRearrangeColumnsProxyModel::index(int row, int column, const QModel // Find the child in the source model, we need its internal pointer const QModelIndex sourceIndex = sourceModel()->index(row, sourceColumnForProxyColumn(column), sourceParent); - Q_ASSERT(sourceIndex.isValid()); + if (!sourceIndex.isValid()) { + return QModelIndex(); + } return createIndex(row, column, sourceIndex.internalPointer()); }