aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSanthosh Kumar <santhosh.kumar.selvaraj@qt.io>2023-05-29 21:31:29 +0200
committerSanthosh Kumar <santhosh.kumar.selvaraj@qt.io>2023-05-30 13:42:35 +0200
commit79e46dd07c3b23f93caced2f443939e34ef515bc (patch)
tree898258eae9386210d12477a0734a9d1b54e072e0
parentcdd7fe05f676ed1664a156beaf63093237a3beac (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.cpp10
-rw-r--r--tests/auto/quick/qquicktableview/data/zerosizedviewport.qml31
-rw-r--r--tests/auto/quick/qquicktableview/tst_qquicktableview.cpp12
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()
{