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.9 6.8
Fixes: QTBUG-132670
Task-number: QTBUG-124173
Change-Id: I51f9e12c66268318e597facfbe4df74367d1089a
Reviewed-by: David Faure <david.faure@kdab.com>
This commit is contained in:
Christian Ehrlicher 2025-01-09 18:00:03 +01:00
parent 9f10fd8374
commit 9d4b5fa017

View File

@ -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?