2013-05-07 32 views
6

i eine horizontale Layout habe und ich bin Hinzufügen von Widgets durchQT - Hinzufügen von Widgets zu horizontalem Layout

mit
ui->horizontalLayout->addWidget(label); 

Aber Strategie Zugabe ist nicht, was ich will. Zum Beispiel, wenn ich Elemente hinzufüge, legt es zuerst den Anfang, dann setzt er am Ende und setzt das Setzen von Ende fort.

adding 3 widgets

keep adding

Aber, was i will, dass, wenn ich Widget Layout hinzufügen, sollte es neben dem vorherigen Widget gesetzt werden. so, what i want

ist es möglich, das zu tun?

Antwort

5

Fügen Sie eine Trage hinzu, nachdem Sie alle Widgets hinzugefügt haben.

ui->horizontalLayout->addStretch(); 

wird tun.

+0

Ich habe versucht, aber es funktioniert nicht – abby

+0

Was ist das Ergebnis? –

+0

nichts hat sich immer noch gleich verändert. – abby

2

Sie können eine spacer item entweder an der Außenseite Ihres horizontalen Layouts oder innerhalb Ihres horizontalen Layouts hinzufügen. Wenn Sie das Abstandselement innerhalb des horizontalen Layouts hinzufügen, müssen Sie sicherstellen, dass Sie Ihre Beschriftungs-Widgets vor dem Abstandselement hinzufügen. Verwenden Sie die insertWidget() Funktion, um in diesem Fall Ihre Beschriftungen hinzuzufügen.

Oder Sie können das spacerem am Ende Ihres horizontalen Layouts hinzufügen, nachdem Sie Ihre Label-Widgets hinzugefügt haben. Hier

ein Beispiel:

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

Haben Sie ein konkreteres Beispiel, wie man spacer item verwendet? – abby

+0

@abby Ich habe meine Antwort geändert und ein Beispiel hinzugefügt. – thuga

+0

fügt es hinzu wie das zweite Bild, das ich in die Frage gestellt habe. Aber ich möchte keinen Platz zwischen Noten wie dem dritten Bild haben. – abby

1

setAlignment(Qt::AlignLeft); sollte es tun. Sie können auch Folgendes verwenden:
setSpacing(0);setContentsMargins(0, 0, 0, 0);
, um zusätzlichen Speicherplatz zwischen Widgets zu entfernen.

Verwandte Themen