summaryrefslogtreecommitdiffstats
path: root/src/widgets
diff options
context:
space:
mode:
authorJan Arve Saether <jan-arve.saether@digia.com>2012-10-10 13:42:07 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-10-10 14:22:58 +0200
commit9f96bf20238a21b62c34261d8dc5a0ad0bfdc789 (patch)
treeb016f48eb0d3427bc695412eb97edd66f37a4bbe /src/widgets
parentf92f78094d2e626b439070b9087243d304a95115 (diff)
Fix a regression with regards to hfw behavior in QStackedWidget
This is a regression because we made QStackedWidget actually support heightForWidth in 4.8. This was done with change 4780f94e391b5e881497c5228661dead42c821fa. The problem was that heightForWidth was not calculated correctly because some of the pages were hidden. The hidden pages were actually not contributing to the hfw of the QStackedWidget at all. This again caused the QStackedWidget to change its heightForWidth() value when the current tab changed, which again could cause "jumps" in the UI when switching tabs (as demonstrated in the task). The problem was that the patch relied on calling QWidgetItem::heightForWidth(), and this function would return -1 if the widget was hidden. However, QWidget::heightForWidth() does not have this magic and returns the proper hfw value regardless of its visibility. One could argue about the correctness of this patch, but since QStackedLayout::sizeHint() disregards QWidgetItem::sizeHint() (it asks the widget directly), we do the same in QStackedLayoutHFW::heightForWidth() for consistency. In addition, QStackedLayout enforces that only widgets can be added to it, and you cannot add your own QLayoutItem subclasses to it: qWarning("QStackedLayout::addItem: Only widgets can be added"); Task-id: QTBUG-24758 Change-Id: I349cf8f4215e4581ea237ef773d53dcdf3db176b Reviewed-by: Paul Olav Tvete <paul.tvete@digia.com>
Diffstat (limited to 'src/widgets')
-rw-r--r--src/widgets/kernel/qstackedlayout.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/widgets/kernel/qstackedlayout.cpp b/src/widgets/kernel/qstackedlayout.cpp
index 003454c525..2660e4339e 100644
--- a/src/widgets/kernel/qstackedlayout.cpp
+++ b/src/widgets/kernel/qstackedlayout.cpp
@@ -502,9 +502,17 @@ int QStackedLayout::heightForWidth(int width) const
int hfw = 0;
for (int i = 0; i < n; ++i) {
if (QLayoutItem *item = itemAt(i)) {
- hfw = qMax(hfw, item->heightForWidth(width));
+ if (QWidget *w = item->widget())
+ /*
+ Note: Does not query the layout item, but bypasses it and asks the widget
+ directly. This is consistent with how QStackedLayout::sizeHint() is
+ implemented. This also avoids an issue where QWidgetItem::heightForWidth()
+ returns -1 if the widget is hidden.
+ */
+ hfw = qMax(hfw, w->heightForWidth(width));
}
}
+ hfw = qMax(hfw, minimumSize().height());
return hfw;
}