From daba850df8bc9decd53e7719c83bf834e7f21654 Mon Sep 17 00:00:00 2001 From: Christian Ehrlicher Date: Fri, 5 Oct 2018 21:49:47 +0200 Subject: [PATCH] QTreeView: small optimization in verticalOffset() When the scroll mode is ScrollPerItem and uniformRowHeights is not set, the offset has to be calculated by iterating over all items. Optimize the loop by calculating the last item before the loop instead of checking at every iteration. Task-number: QTBUG-61763 Change-Id: I1d4439fe0fc3f32194f5f368c0486e793048d965 Reviewed-by: David Faure Reviewed-by: Luca Beldi --- src/widgets/itemviews/qtreeview.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/widgets/itemviews/qtreeview.cpp b/src/widgets/itemviews/qtreeview.cpp index dd2bcb124e..b65cf5af2b 100644 --- a/src/widgets/itemviews/qtreeview.cpp +++ b/src/widgets/itemviews/qtreeview.cpp @@ -2153,12 +2153,10 @@ int QTreeView::verticalOffset() const // ### find a faster way to do this d->executePostedLayout(); int offset = 0; - for (int i = 0; i < d->viewItems.count(); ++i) { - if (i == verticalScrollBar()->value()) - return offset; + const int cnt = std::min(d->viewItems.count(), verticalScrollBar()->value()); + for (int i = 0; i < cnt; ++i) offset += d->itemHeight(i); - } - return 0; + return offset; } // scroll per pixel return verticalScrollBar()->value();