From 6b2cbb3fd600db286254df3ef6fc77da25107341 Mon Sep 17 00:00:00 2001 From: Sami Varanka Date: Wed, 19 Jun 2024 16:41:07 +0300 Subject: [PATCH] Include horizontal scrollbar's size in sizehint Amends 8c18a245b0245de20c064cd53d03498088bd57df Pick-to: 6.7 6.5 Fixes: QTBUG-123886 Change-Id: I1ae2e29ce12610e10a8c0640458a3812a926c4cc Reviewed-by: Volker Hilsheimer (cherry picked from commit 0fa6660352df18134757a9c3f9dd329053e31cab) Reviewed-by: Qt Cherry-pick Bot --- src/widgets/widgets/qabstractscrollarea.cpp | 2 +- .../qabstractscrollarea/tst_qabstractscrollarea.cpp | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/widgets/widgets/qabstractscrollarea.cpp b/src/widgets/widgets/qabstractscrollarea.cpp index f6f8e8b7952..a146d4c4f90 100644 --- a/src/widgets/widgets/qabstractscrollarea.cpp +++ b/src/widgets/widgets/qabstractscrollarea.cpp @@ -1433,7 +1433,7 @@ QSize QAbstractScrollArea::sizeHint() const const int f = 2 * d->frameWidth; const QSize frame(f, f); const bool vbarHidden = !d->vbar->isVisibleTo(this) || d->vbarpolicy == Qt::ScrollBarAlwaysOff; - const bool hbarHidden = !d->vbar->isVisibleTo(this) || d->hbarpolicy == Qt::ScrollBarAlwaysOff; + const bool hbarHidden = !d->hbar->isVisibleTo(this) || d->hbarpolicy == Qt::ScrollBarAlwaysOff; const QSize scrollbars(vbarHidden ? 0 : d->vbar->sizeHint().width(), hbarHidden ? 0 : d->hbar->sizeHint().height()); d->sizeHint = frame + scrollbars + viewportSizeHint(); diff --git a/tests/auto/widgets/widgets/qabstractscrollarea/tst_qabstractscrollarea.cpp b/tests/auto/widgets/widgets/qabstractscrollarea/tst_qabstractscrollarea.cpp index fa1f799855e..f91d9846562 100644 --- a/tests/auto/widgets/widgets/qabstractscrollarea/tst_qabstractscrollarea.cpp +++ b/tests/auto/widgets/widgets/qabstractscrollarea/tst_qabstractscrollarea.cpp @@ -431,6 +431,18 @@ void tst_QAbstractScrollArea::sizeHint() QSize sizeHint = scrollArea.sizeHint(); QCOMPARE(sizeHint, scrollArea.viewportSizeHint()); + // check if the hScrollbar is taken into account + scrollArea.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn); + scrollArea.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + QCOMPARE_GT(scrollArea.sizeHint().height(), scrollArea.viewportSizeHint().height()); + + // check if the vScrollbar is taken into account + scrollArea.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + scrollArea.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); + QCOMPARE_GT(scrollArea.sizeHint().width(), scrollArea.viewportSizeHint().width()); + + scrollArea.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn); + scrollArea.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); scrollArea.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn); const QSize sizeHintWithScrollBars = scrollArea.sizeHint();