Sto provando a fare qualcosa di simile. Ho un widget fisso (in alto) e un widget non fisso (in basso). Voglio che l'utente sia in grado di usare normalmente lo splitter, ma non voglio che le ridimensionamenti delle finestre aggiungano spazio al widget fisso. L'uso di setSizePolicy su entrambi i widget non ha funzionato per me, e nemmeno con setStretchFactor su uno o su entrambi i widget.
Ho terminato la sottoclasse di QSplitter in modo da poter implementare un resizeEvent che spostava lo splitter dopo il ridimensionamento dello splitter. Questo codice presuppone: Ci sono solo due widget. La parte superiore [0] è ridimensionabile e la parte inferiore [1] non dovrebbe essere.
Ecco il resizeEvent che ho scritto:
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);
}
fonte
2013-10-17 00:39:22