2009-11-04 6 views
5

Ho un QDialog con cui sto lavorando. È un po 'come un QMessageBox. Ho notato che la dimensione di QMessageBox (e la dimensione della sua etichetta) dipende dalla dimensione del messaggio visualizzato.Come si regola automaticamente la dimensione di un QDialog in base alla lunghezza del testo di uno dei suoi figli?

Come faccio a impostare la dimensione del mio QDialog automaticamente come QMessageBox? Attualmente il mio QDialog contiene una scatola di pulsanti e un'etichetta, e il QDialog è il layout Verticale.

(So che potrei semplicemente usare la finestra di messaggio direttamente, ma alla fine avrò finestre di dialogo più complesse.)

risposta

13

soluzione automatica:

Utilizzare i layout e impostare le politiche per le dimensioni su QSizePolicy::Expanding. In QtDesigner, una volta che tutti i tuoi figli sono stati posizionati sul tuo QDialog, fai clic sul pulsante Regola dimensioni successivo al layout. Il tuo QDialog verrà automaticamente ridimensionato in fase di runtime.

soluzione manuale:

La classe QWidget ha un metodo adjustSize che ridimensionare il QWidget per misura il suo contenuto. Basta chiamarlo quando tutti i bambini sono impostati.

+1

la soluzione manuale non funziona nel mio caso: ho un QDialog con un QVBoxLayout con QTableWidget e un QHBoxLayout con 2 pulsanti, ho impostato i criteri su Espansione e richiamando adjustSize sulla finestra di dialogo non fa esattamente nulla (visibile) – Lars

+0

È importante chiamare QApplication :: processEvents() prima di chiamare adjustSize(), come documentato qui: http://daniel-albuschat.blogspot.de/2009/08/shrinking-qt-widgets-to-minimum-needed.html – Cerno

1

impostare il proprio dialogo a essere in espansione, e molto piccola. Quindi, assicurarsi di impostare il messaggio prima di mostrare la finestra di dialogo. Quando viene mostrato, cercherà di trovare la sua dimensione corretta, in base alla dimensione degli oggetti che contiene. (Questo accade in modo ricorsivo, quindi, se il dialogo non è il genitore diretta dell'etichetta in cui si mostra il tuo messaggio, assicurarsi che tutto tra l'etichetta e la finestra di dialogo è impostato per utilizzare i layout.)

Problemi correlati