From c74f0ccf1552271cc7a01bd9baa3567091894623 Mon Sep 17 00:00:00 2001 From: Christian Ehrlicher Date: Thu, 9 Jan 2025 18:00:03 +0100 Subject: [PATCH] QTreeView: fix Private::intersectedRect() Don't try to update the left and right boundaries when no valid idxRect was found. Also fix the early exit check - we can exit when the idxRect is completely below *or* completely above the current viewport. This amends 2f9c72028d2481f587f378a256654d0a362e3d44. Pick-to: 6.8 Fixes: QTBUG-132670 Task-number: QTBUG-124173 Change-Id: I51f9e12c66268318e597facfbe4df74367d1089a Reviewed-by: David Faure (cherry picked from commit 9d4b5fa017199627a42477a842a4e1ef349bb1ae) Reviewed-by: Qt Cherry-pick Bot --- src/widgets/itemviews/qtreeview.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/widgets/itemviews/qtreeview.cpp b/src/widgets/itemviews/qtreeview.cpp index 7d85442c2c4..5bb9a782c4e 100644 --- a/src/widgets/itemviews/qtreeview.cpp +++ b/src/widgets/itemviews/qtreeview.cpp @@ -1428,7 +1428,7 @@ QRect QTreeViewPrivate::intersectedRect(const QRect rect, const QModelIndex &top if (idxRect.isNull()) continue; // early exit when complete row is out of viewport - if (idxRect.top() > rect.bottom() && idxRect.bottom() < rect.top()) + if (idxRect.top() > rect.bottom() || idxRect.bottom() < rect.top()) break; if (!idxRect.intersects(rect)) continue; @@ -1436,8 +1436,10 @@ QRect QTreeViewPrivate::intersectedRect(const QRect rect, const QModelIndex &top if (rowRect.left() < rect.left() && rowRect.right() > rect.right()) break; } - left = std::min(left, rowRect.left()); - right = std::max(right, rowRect.right()); + if (rowRect.isValid()) { + left = std::min(left, rowRect.left()); + right = std::max(right, rowRect.right()); + } } updateRect = updateRect.united(rowRect); if (updateRect.contains(rect)) // already full rect covered?