Ich füge dynamisch Widgets in einer QScrollArea hinzu und möchte maximal vier Widgets gleichzeitig anzeigen, bevor die Bildlaufleiste angezeigt wird. Also, im Grunde, wenn ich 0-3 Widgets habe und ich ein anderes hinzufüge, wird der Bildlaufbereich auf die neue Höhe angepasst, danach bleibt die Höhe auf der 4 Widgets Größe und man muss blättern, um den 5., 6., ...Qt: Größe von QScrollArea so ändern, dass maximal 4 Widgets angezeigt werden
Derzeit rufe ich die folgende Methode auf, wenn ein Widget eingefügt/entfernt wird.
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);
}
Das Problem ist, dass sizeHint() ist nicht immer die richtige Höhe (manchmal zu groß), aber weder ist size() (oft zu klein). Daher ist mein Bildlaufbereich oft etwas zu groß für den Inhalt, aber manchmal funktioniert es.
Nicht alle meine Widgets haben die gleiche Höhe, und manchmal scheint sizeHint die richtige zu sein, und manchmal ist es Größe.
Ich verstehe sizeHint ist die Größe, die das Widget haben möchte, nicht die, die das Layout ihm gibt, aber ich verstehe nicht, warum die Größe inkorrekt ist.
Jede Idee, wie ich es tun sollte, würde am meisten geschätzt werden.
Werfen Sie einen Blick auf [diese Antwort] (http://stackoverflow.com/a/21265287/1329652). –