diff --git a/src/quick/items/qquicktableview.cpp b/src/quick/items/qquicktableview.cpp index a20c59e088..863d5100bb 100644 --- a/src/quick/items/qquicktableview.cpp +++ b/src/quick/items/qquicktableview.cpp @@ -2072,7 +2072,10 @@ void QQuickTableViewPrivate::updateContentWidth() if (loadedItems.isEmpty()) { QBoolBlocker fixupGuard(inUpdateContentSize, true); - q->QQuickFlickable::setContentWidth(0); + if (model && model->count() > 0 && tableModel && tableModel->delegate()) + q->QQuickFlickable::setContentWidth(kDefaultColumnWidth); + else + q->QQuickFlickable::setContentWidth(0); return; } @@ -2105,7 +2108,10 @@ void QQuickTableViewPrivate::updateContentHeight() if (loadedItems.isEmpty()) { QBoolBlocker fixupGuard(inUpdateContentSize, true); - q->QQuickFlickable::setContentHeight(0); + if (model && model->count() > 0 && tableModel && tableModel->delegate()) + q->QQuickFlickable::setContentHeight(kDefaultRowHeight); + else + q->QQuickFlickable::setContentHeight(0); return; } diff --git a/tests/auto/quick/qquicktableview/data/zerosizedviewport.qml b/tests/auto/quick/qquicktableview/data/zerosizedviewport.qml new file mode 100644 index 0000000000..ea1956c6be --- /dev/null +++ b/tests/auto/quick/qquicktableview/data/zerosizedviewport.qml @@ -0,0 +1,31 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import QtQuick +import QtQuick.Window + +Item { + width: 640 + height: 450 + + property alias tableView: tableView + + TableView { + id: tableView + anchors.top: parent.top + anchors.left: parent.left + anchors.bottom: parent.bottom + width: contentWidth + delegate: tableViewDelegate + } + + Component { + id: tableViewDelegate + Rectangle { + objectName: "tableViewDelegate" + implicitWidth: tableView.width + implicitHeight: 50 + } + } + +} diff --git a/tests/auto/quick/qquicktableview/tst_qquicktableview.cpp b/tests/auto/quick/qquicktableview/tst_qquicktableview.cpp index 84cfe3b62d..fe27b374f5 100644 --- a/tests/auto/quick/qquicktableview/tst_qquicktableview.cpp +++ b/tests/auto/quick/qquicktableview/tst_qquicktableview.cpp @@ -87,6 +87,7 @@ private slots: void checkZeroSizedDelegate(); void checkImplicitSizeDelegate(); void checkZeroSizedTableView(); + void checkZeroSizedViewPort(); void checkColumnWidthWithoutProvider(); void checkColumnWidthAndRowHeightFunctions(); void checkDelegateWithAnchors(); @@ -460,6 +461,17 @@ void tst_QQuickTableView::checkZeroSizedTableView() QCOMPARE(tableViewPrivate->loadedItems.size(), 1); } +void tst_QQuickTableView::checkZeroSizedViewPort() +{ + LOAD_TABLEVIEW("zerosizedviewport.qml"); + + auto model = TestModelAsVariant(20, 20); + tableView->setModel(model); + + WAIT_UNTIL_POLISHED; + + QVERIFY(!tableViewPrivate->loadedItems.isEmpty()); +} void tst_QQuickTableView::checkColumnWidthWithoutProvider() {