2012-03-30 8 views
5

La gerarchia figlio-genitore è la seguente: mainWindow -> centralWidget -> frame -> widget.ridimensiona QMainWindow in base a un widget figlio?

Il widget viene ridimensionato durante la durata dell'applicazione, tuttavia è sempre impostato su una dimensione fissa. Voglio che QMainWindow ridimensioni in base a quello - per avere una dimensione minima necessaria per visualizzare tutti i widget.

Per fare ciò, al momento devo farlo.

widget->setFixedSize(x, y); 
frame->setFixedSize(frame->sizeHint()); 
centralWidget->setFixedSize(centralWidget->sizeHint()); 
mainWindow->setFixedSize(mainWindow->sizeHint()); 

Non funziona correttamente se ho solo ridimensionato la finestra principale. Tutti i genitori di widget devono essere ridimensionati affinché funzioni. C'è un modo più elegante? È possibile ridimensionare la finestra principale ridimensionando tutti i suoi bambini?

NOTA: tutti i widget ad eccezione di "widget" hanno una gestione automatica del layout. Quindi trovo strano che non si ridimensionino in base al "widget".

+1

potrei non essere la comprensione tua domanda del tutto, ma si può non chiamare 'setMinimumSize()' invece di 'setFixedSize()'? – Chris

risposta

2

È compito del layout determinare la dimensione e la posizione dei widget. Pertanto, se si ridimensiona in modo esplicito un widget figlio all'interno di un layout, è necessario assicurarsi che la nuova dimensione sia passata correttamente attraverso il sistema di layout. Ciò può essere fatto assicurandosi che sizeHint() del widget restituisca la nuova dimensione. Il valore restituito da sizeHint() verrà utilizzato quando il layout calcola la nuova dimensione. Quindi, dopo che sizeHint() è cambiato, chiama semplicemente updateGeometry() [qt.nokia.com] che notificherà al sistema di layout che il widget è cambiato e potrebbe essere necessario cambiare la geometria.

Un modo alternativo per garantire che il widget padre venga ridimensionato in risposta al ridimensionamento del figlio, consiste nel chiamare setFixedSize() sul figlio.

Per maggiori dettagli si veda questo ...

http://qt-project.org/faq/answer/how_can_i_trigger_the_parent_widget_to_resize_when_its_child_widget_is_resi

1

Si dovrebbe lasciare il layout gestire dimensioni widget. Per quanto mi riguarda v'è 2 situazioni:

  1. con il layout quando si sta ridimensionando un genitore tutti i bambini sono il ridimensionamento anche per quanto riguarda la politica di dimensioni che hai fornito a loro. Se si sceglie una politica fissa, i bambini non verranno ridimensionati. Quindi devi ridimensionarli a mano ... ma è davvero strano.

  2. Quando ridimensionate un bambino come fate, il genitore non viene ridimensionato automaticamente. Devi farlo a mano. Fortunatamente c'è una "funzione magica per questo: AdjustSize .Se lo chiami da QMainWindow, tutti i widget verranno ridimensionati alla loro dimensione di ottimizzazione.È possibile (non posso testarlo qui) che questo non funzioni in fase di runtime se la politica delle dimensioni è impostato su fisso.

Speranza che aiuta

+0

Qt 5.5. 'adjustSize 'non funziona,' ridimensiona (sizeHint()) 'fa. –

Problemi correlati