Come far crescere un widget Qt con le dimensioni della finestra?


89

Voglio avere un piccolo QFormLayoutche cresce fino a riempire il suo widget genitore.

Ho creato un nuovo file .ui utilizzando il QWidgetmodello in Qt Designer. Ho inserito una QFormLayout"finestra" all'interno, quindi ho inserito alcuni controlli all'interno QFormLayout.

Tutto funziona abbastanza bene, ma QFormLayoutrimane sempre della dimensione che ho impostato in Qt Designer. Vorrei che QFormLayoutriempisse il suo widget genitore e crescesse / riducesse con esso.

Come posso farlo?

Risposte:


130

In Designer, attiva il centralWidget e assegna un layout, ad esempio un layout orizzontale o verticale. Quindi il tuo QFormLayout verrà ridimensionato automaticamente.

Immagine di Designer

Assicurati sempre che tutti i widget abbiano un layout! Altrimenti, il ridimensionamento automatico si interromperà con quel widget!

Guarda anche

I controlli insistono per essere troppo grandi e non vengono ridimensionati in QtDesigner


13
QtDesigner a volte può creare confusione.
bastibe

30
oh, GRAZIE per questo! :-) Ho fissato QtDesigner (beh, QtCreator, la stessa cosa lì però) per mezz'ora e non sono riuscito a capire perché il mio widget centrale non si ridimensiona al massimo - finché non ho notato che la piccola piccola icona tu hanno cerchiato nella tua risposta ha un segno rosso "disabilitato" su di esso. un clic sul pulsante "Disponi verticalmente" nella barra degli strumenti del creatore e il problema è risolto. La prima volta che noto quella barra degli strumenti BTW, facile da trascurare ...
ssc

8
Per commentare la risposta di Jens: Su Mac, fai clic sul widget di primo livello (non necessariamente denominato "centralWidget") quindi fai clic su "Modulo" nella barra dei menu e seleziona uno dei layout.
hnasarat

2
Se qualcuno si sta ancora chiedendo, questo viene fatto su Windows in QT5.8 / QT Creator 4.2.1 facendo clic sul livello superiore "centralWidget" (che ha un piccolo segno rosso su di esso) e poi andando su Strumenti> Editor di moduli> Layout Verticalmente (o orizzontalmente).
LeoR

41

Ho scoperto che era impossibile assegnare un layout al widget centrale finché non avessi aggiunto almeno un bambino sotto di esso. Quindi potrei evidenziare la piccola icona con il segno rosso "disabilitato" e quindi fare clic su un layout nella barra degli strumenti di Designer in alto.


4
Questo è esasperante. Assegnare un layout al widget centrale dovrebbe essere l'operazione più banale in Qt Creator. Invece, facendo lo richiede combinando questa soluzione altamente intuitivo con Jens ' altrettanto soluzione poco intuitivo ( in questo ordine esatto ). Mentre l'automazione fornita da Qt Creator continua a battere il ripetitivo boilerplate con un ampio margine, l'hacking attorno alla sua spaventosa esperienza utente (UX) mi ha dato una nuova contrazione degli occhi.
Cecil Curry

@Cecil Curry anche dopo quella soluzione mi ci sono voluti 20 minuti per capire cosa avrei dovuto ... perché centralWidget nel solo caso in cui non c'è un'opzione del menu contestuale per aggiungere il layout ... solo un pulsante micriscopico nella barra degli strumenti che sembra quasi inattivo
Swift - Friday Pie

3
Scrivendo questo commento poiché anche dopo le soluzioni qui, ho avuto problemi a trovare l'opzione. Devi selezionare il widget centrale, quindi fare clic con il pulsante destro del mouse in uno spazio libero della tua app, andare su "Layout" nel menu contestuale che si è aperto e quindi selezionare il layout desiderato. Questo ha funzionato almeno per me (QT5, utilizzando QT Designer 5.11.1).
kushy

11

La risposta accettata (la sua immagine) è sbagliata, almeno ora in QT5. Invece dovresti assegnare un layout all'oggetto / widget radice (che punta all'immagine di cui sopra, dovrebbe essere il MainWindowinvece di centralWidget). Nota anche che devi averne almeno uno QObjectcreato sotto affinché funzioni. Fallo e la tua interfaccia utente diventerà reattiva al ridimensionamento della finestra.


2

È necessario modificare il tipo di layout predefinito dell'oggetto QWidget di livello superiore dal tipo di layout Break ad altri tipi di layout (Layout verticale, Layout orizzontale, Layout griglia, Layout modulo). Per esempio: inserisci qui la descrizione dell'immagine

A qualcosa del genere:

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.