diff options
author | Santhosh Kumar <santhosh.kumar.selvaraj@qt.io> | 2023-05-29 21:31:29 +0200 |
---|---|---|
committer | Santhosh Kumar <santhosh.kumar.selvaraj@qt.io> | 2023-05-30 13:42:35 +0200 |
commit | 79e46dd07c3b23f93caced2f443939e34ef515bc (patch) | |
tree | 898258eae9386210d12477a0734a9d1b54e072e0 | |
parent | cdd7fe05f676ed1664a156beaf63093237a3beac (diff) |
Fix delegate loading issue when valid size is specified
The patchset ebefb583c886dba86aa51012fb377762235f2379 is made to avoid
loading delegate when view port size is zero. But this affects the
scenario when any of its size is valid in delegates.
This patchset fixes delegate loading issue when valid size is specified
in it.
Fixes: QTBUG-113852
Pick-to: 6.5
Change-Id: Ib8b527175b91fefb8062f7ea5abc0c9b7860a0e7
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
-rw-r--r-- | src/quick/items/qquicktableview.cpp | 10 | ||||
-rw-r--r-- | tests/auto/quick/qquicktableview/data/zerosizedviewport.qml | 31 | ||||
-rw-r--r-- | tests/auto/quick/qquicktableview/tst_qquicktableview.cpp | 12 |
3 files changed, 51 insertions, 2 deletions
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() { |