2013-05-09 16 views
7

Ho un QGLWidget, che voglio ridimensionare a una determinata risoluzione (più grande della finestra che lo contiene). La mia intenzione è che la finestra si espanda fino a quando il widget non si adatta all'interno, ma non riesce a trovare un modo per farlo.Ridimensiona finestra per adattarsi al contenuto

Ho provato diversi comandi dopo aver ridimensionato QGLWidget per farlo funzionare senza successo. Elencherò i risultati qui:

  • non fare nient'altro: il Widget si sovrappone all'intera finestra. Alla fine verrà ridimensionata per adattarsi nuovamente dentro la finestra più piccola
  • mainWindow.adjustSize(): Il widget viene ridimensionata a (0, 0)
  • mainWindow.resize(mainWindow.sizeHint()): vedi sopra
  • mainWindow.resize(mainWindow.minimumSizeHint()): vedi sopra

Ho anche letto in this thread, che prima di eseguire il ridimensionamento della finestra principale I è necessario eseguire il ciclo degli eventi per ricalcolare le nuove dimensioni, quindi ho inserito QCoreApplication::processEvents per farlo, senza alcun effetto visibile.

Quindi, come ridimensionare la finestra tramite il widget?

Modifica

Il GLWidget non è l'unico widget di della finestra. È incorporato nello splitter insieme a una casella di gruppo.

risposta

6

http://qt-project.org/doc/qt-4.8/qwidget.html#sizePolicy-prop

http://qt-project.org/doc/qt-4.8/qsizepolicy.html#Policy-enum

http://qt-project.org/doc/qt-4.8/qwidget.html#setFixedSize

Quindi supponendo che avete la vostra QGLWidget annidati all'interno del vostro QMainWindow come il widget di centrale, è necessario impostare la politica dimensioni del vostro QGLWidget.

Ad esempio:

QGLWidget * glw; // in your header for QMainWindow 

...

// In your constructor for QMainWindow 
glw = new QGLWidget; 
this->setCentralWidget(glw); 
glw->setFixedSize(500, 500); 

this->adjustSize(); 

Speranza che aiuta.

+0

Mentre questo ridimensiona davvero la finestra alla dimensione necessaria che impedisce ulteriormente il ridimensionamento da parte dell'utente. Dalla documentazione: 'Imposta le dimensioni minima e massima del widget su s, impedendole così di crescere o restringersi. Ho appena provato a salvare e ripristinare le vecchie dimensioni minime e massime, ma questo non comporta alcun cambiamento . – Nobody

+0

Invece di 'setFixedSize()', prova 'setMinimumSize()', e usa 'setSizePolicy()'. Hai davvero molto controllo su come le cose si espandono e reagiscono usando 'setSizePolicy()'. 'setFixedSize()' fa un sacco di cose contemporaneamente, quindi probabilmente non è quello che vuoi in questo caso. – phyatt

+0

'minimumSize' sembra anche la cosa sbagliata per me. L'utente dovrebbe essere in grado di ridimensionare arbitrariamente. Ho solo bisogno della finestra per far apparire la dimensione che si adatta alla dimensione richiesta del 'QGLWidget'. – Nobody

1

Ho un'app che doveva essere molto simile alle tue esigenze, quindi posterò la mia soluzione qui. Un'immagine che copre la finestra che è liberamente espandibile e restringibile, e può essere cambiata alla dimensione originale, e rimanere espansibile/restringibile dopo di ciò.

Ho utilizzato un widget QLabel per visualizzare l'immagine, ma dovrebbe funzionare anche con altri tipi di widget. Ho creato il widget con una dimensione iniziale e lo QSizePolicy::Ignored.

label->resize (w, h); // initial size 
label->setSizePolicy (QSizePolicy::Ignored, QSizePolicy::Ignored); 

L'etichetta Widget E 'stato in un QVBoxLayout con pochi pulsanti della finestra, ma questo può funzionare con altri tipi di layout troppo.

La finestra e widget di immagine possono essere ridimensionati a dimensioni originali dell'immagine con questo codice:

label->resize (w, h); // change to original size 
label->setMinimumSize (w, h); // prevent it from collapsing to zero immediately 
window->adjustSize(); // resize the window 
label->setMinimumSize (0, 0); // allow shrinking afterwards 
+0

Sfortunatamente, questo non funziona per me. Il widget viene ridimensionato ma il 'adjustSize()' sulla finestra collassa la finestra sotto la dimensione del widget, forse è causata dagli splitter che sto usando. – Nobody

Problemi correlati