Próbuję zrobić coś podobnego. Mam jeden stały widget (u góry) i jeden niezmienny widget (u dołu). Chcę, aby użytkownik mógł normalnie korzystać z uchwytu rozdzielacza, ale nie chcę zmieniać rozmiarów okna, aby dodać przestrzeń do stałego widgetu. Używanie metody setSizePolicy w obu widżetach nie działało dla mnie, podobnie jak użycie parametru setStretchFactor w jednym lub obu widgetach.
Skończyłem podklasę QSplitter, dzięki czemu mogłem zaimplementować resizeEvent, który przesunie splittera po zmianie rozmiaru splittera. Ten kod zakłada: Istnieją tylko dwa widżety. Górna [0] może być zmieniana, a dolna [1] nie.
Oto resizeEvent że napisałem:
MySplitter::resizeEvent(QResizeEvent *event) {
/* The first resizeEvent is -1 for height and width, because it was
invisible before. */
if (event->oldSize().height() != -1) {
int diff;
QList<int> previousSizes = sizes();
QSplitter::resizeEvent(event);
QList<int> newSizes = sizes();
/* The bottom widget is the fixed one, so find out if that is to
grow or shrink. */
diff = newSizes[1] - previousSizes[1];
if (diff > 0) {
/* Keep the bottom from growing by giving the size to the top. */
newSizes[0] += diff;
newSizes[1] -= diff;
}
else {
/* Steal size from the top to keep it from shrinking. */
newSizes[0] -= diff;
newSizes[1] += diff;
}
setSizes(newSizes);
}
else
QSplitter::resizeEvent(event);
}