diff --git a/src/quick/items/qquickitemview.cpp b/src/quick/items/qquickitemview.cpp index f7b28e14558d9b85808f96997559c31dbb72f6a1..1774931e68411a7494d976955c6a116e320795cd 100644 --- a/src/quick/items/qquickitemview.cpp +++ b/src/quick/items/qquickitemview.cpp @@ -1714,13 +1714,12 @@ void QQuickItemViewPrivate::regenerate() void QQuickItemViewPrivate::updateViewport() { Q_Q(QQuickItemView); - if (isValid()) { - qreal extra = headerSize() + footerSize(); - if (layoutOrientation() == Qt::Vertical) - q->setContentHeight(endPosition() - startPosition() + extra); - else - q->setContentWidth(endPosition() - startPosition() + extra); - } + qreal extra = headerSize() + footerSize(); + qreal contentSize = isValid() ? (endPosition() - startPosition()) : 0.0; + if (layoutOrientation() == Qt::Vertical) + q->setContentHeight(contentSize + extra); + else + q->setContentWidth(contentSize + extra); } void QQuickItemViewPrivate::layout() diff --git a/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp b/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp index 235c29f5a42c3155e86ab37a7f1b49677b6d8bc7..9a8420084685623bfb8f360289f2f665139f0a6f 100644 --- a/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp +++ b/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp @@ -1238,6 +1238,7 @@ void tst_QQuickGridView::clear() QVERIFY(gridview->currentItem() == 0); QVERIFY(gridview->contentY() == 0); QVERIFY(gridview->currentIndex() == -1); + QCOMPARE(gridview->contentHeight(), 0.0); // confirm sanity when adding an item to cleared list model.addItem("New", "1"); @@ -3146,6 +3147,10 @@ void tst_QQuickGridView::footer() // remove all items model.clear(); + if (flow == QQuickGridView::FlowLeftToRight) + QTRY_COMPARE(gridview->contentHeight(), footer->height()); + else + QTRY_COMPARE(gridview->contentWidth(), footer->width()); QPointF posWhenNoItems(0, 0); if (layoutDirection == Qt::RightToLeft) @@ -3360,6 +3365,10 @@ void tst_QQuickGridView::header() model.clear(); QTRY_COMPARE(QQuickItemPrivate::get(gridview)->polishScheduled, false); QCOMPARE(header->pos(), initialHeaderPos); // header should stay where it is + if (flow == QQuickGridView::FlowLeftToRight) + QCOMPARE(gridview->contentHeight(), header->height()); + else + QCOMPARE(gridview->contentWidth(), header->width()); for (int i = 0; i < 30; i++) model.addItem("Item" + QString::number(i), ""); diff --git a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp index 45337e281404a287cf96a42ab7cb25ee802e2d4d..4696e44e411ef8ba8148a94339f47ee1130453a0 100644 --- a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp +++ b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp @@ -1210,6 +1210,8 @@ void tst_QQuickListView::clear(const QUrl &source, QQuickItemView::VerticalLayou QTRY_COMPARE(listview->contentY(), -listview->height()); QVERIFY(listview->currentIndex() == -1); + QCOMPARE(listview->contentHeight(), 0.0); + // confirm sanity when adding an item to cleared list model.addItem("New", "1"); QTRY_VERIFY(listview->count() == 1); @@ -3343,6 +3345,10 @@ void tst_QQuickListView::header() model.clear(); QTRY_COMPARE(listview->count(), model.count()); QCOMPARE(header->pos(), initialHeaderPos); // header should stay where it is + if (orientation == QQuickListView::Vertical) + QCOMPARE(listview->contentHeight(), header->height()); + else + QCOMPARE(listview->contentWidth(), header->width()); for (int i = 0; i < 30; i++) model.addItem("Item" + QString::number(i), ""); @@ -3559,6 +3565,10 @@ void tst_QQuickListView::footer() // remove all items model.clear(); + if (orientation == QQuickListView::Vertical) + QTRY_COMPARE(listview->contentHeight(), footer->height()); + else + QTRY_COMPARE(listview->contentWidth(), footer->width()); QPointF posWhenNoItems(0, 0); if (orientation == QQuickListView::Horizontal && layoutDirection == Qt::RightToLeft)