Ich versuche etwas ähnliches zu tun. Ich habe ein festes Widget (oben) und ein nicht fixiertes Widget (unten). Ich möchte, dass der Benutzer das Splitter-Handle normal verwenden kann, aber ich möchte nicht, dass die Fenstergröße dem festgelegten Widget mehr Platz bietet. Die Verwendung von setSizePolicy für beide Widgets funktionierte nicht für mich und auch nicht für setStretchFactor auf einem oder beiden Widgets.
Ich habe QSplitter als Unterklasse erstellt, so dass ich ein resizeEvent implementieren konnte, das den Splitter verschieben würde, nachdem der Splitter skaliert wurde. Dieser Code setzt voraus: Es gibt nur zwei Widgets. Die obere [0] ist veränderbar, und die untere [1] sollte nicht geändert werden. Hier
ist das resizeEvent, die ich schrieb:
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);
}