【发布时间】:2016-07-11 14:12:38
【问题描述】:
我在 QScrollArea 中动态添加和删除小部件,并且我希望在滚动条出现之前最多同时显示四个小部件。所以基本上,如果我有 0-3 个小部件并添加另一个小部件,滚动区域的大小会调整以适应新的高度,之后,高度保持在 4 个小部件的大小,你必须滚动才能看到第 5 个、第 6 个, ...
目前,我在插入/删除小部件时调用以下方法。
void WidgetList::resizeScrollArea()
{
// height of the first four widgets
int widgetsHeight = 0;
for (int i = 0; i < _widgets.size() && i < 4; ++i)
{
// height of a widget
widgetsHeight += _widgets.at(i)->sizeHint().height();
}
// some leeway to make sure we have some gap between the widgets
_ui->scrollArea->setFixedHeight(widgetsHeight + 5);
}
问题是 sizeHint() 并不总是正确的高度(有时太大),但 size() 也不是(通常太小)。所以我的滚动区域对于内容来说通常有点太大,但有时它可以工作。
并非我所有的小部件都具有相同的高度,有时 sizeHint 似乎是正确的,有时它是大小。
我知道 sizeHint 是小部件想要的尺寸,而不是布局给它的尺寸,但我不明白为什么尺寸不正确。
任何关于我应该如何做的想法将不胜感激。
【问题讨论】:
-
看看this answer。
标签: c++ qt user-interface