2013-05-07 4 views
6

ho un layout orizzontale e sto aggiungendo widget utilizzandoQT - Aggiunta di widget per layout orizzontale

ui->horizontalLayout->addWidget(label); 

Ma l'aggiunta di strategia non è quello che voglio. Ad esempio, quando aggiungo elementi, prima mette l'inizio, poi mette alla fine e continua a mettere dalla fine.

adding 3 widgets

keep adding

Ma, quello che voglio è che, quando aggiungo widget per il layout, dovrebbe essere messo accanto al widget precedente. così, what i want

è possibile farlo?

risposta

5

Aggiungere una barella ad esso dopo aver aggiunto tutti i widget.

ui->horizontalLayout->addStretch(); 

fare.

+0

ho provato ma non funziona – abby

+0

Qual è il risultato? –

+0

nulla è cambiato lo stesso. – abby

2

È possibile aggiungere uno spacer item, all'esterno del layout orizzontale o all'interno del layout orizzontale. Se aggiungi l'elemento spaziatore all'interno del layout orizzontale, devi assicurarti di aggiungere i widget per le etichette prima dell'elemento spaziatore. Utilizzare la funzione insertWidget() per aggiungere le etichette in questo caso.

Oppure è possibile aggiungere lo spaceritem alla fine del layout orizzontale dopo aver aggiunto i widget di etichetta.

Ecco un esempio:

QHBoxLayout *hlayout = new QHBoxLayout; 
ui->verticalLayout->addLayout(hlayout); 
QSpacerItem *item = new QSpacerItem(1,1, QSizePolicy::Expanding, QSizePolicy::Fixed); 
hlayout->addSpacerItem(item); 
for(int i = 0; i < 10; i++) 
{ 
    QLabel *label = new QLabel("NOTE"); 
    hlayout->insertWidget(i, label); 
} 
+0

Hai un esempio più specifico su come utilizzare l'elemento spacer? – abby

+0

@abby Ho modificato la mia risposta e aggiunto un esempio. – thuga

+0

aggiunge come la seconda immagine che ho messo nella domanda. Ma non voglio avere spazio tra le note come la terza foto. – abby

1

setAlignment(Qt::AlignLeft); dovrebbe fare il trucco. Inoltre è possibile utilizzare questo con:
setSpacing(0);setContentsMargins(0, 0, 0, 0);
per rimuovere ulteriore spazio tra i widget.