2017-03-06 5 views
0

Ich versuche, eine Reihe von QLabels in eine QVBoxLayout hinzuzufügen:QVBoxLayout alle Widgets hinzufügen

QVBoxLayout *qVB = new QVBoxLayout(); 

QLabel *l1 = new QLabel("L 1"); 
QLabel *l2 = new QLabel("L 2"); 
QLabel *l3 = new QLabel("L 3"); 
QLabel *l4 = new QLabel("L 4"); 

qVB -> addWidget(l1); 
qVB -> addWidget(l2); 
qVB -> addWidget(l3); 
qVB -> addWidget(l4); 

In Java gibt es eine viel einfachere Lösung:

VBox vb = new VBox(); 

Label l1 = new Label("1"); 
Label l2 = new Label("2"); 
Label l3 = new Label("3"); 

vb.getChildren().addAll(l1, l2, l3); 

Gibt es etwas Ähnliches in Qt \ C++, das mich weniger tappen lassen könnte?

+0

Sie können auch den Qt Designer verwenden und den Code vermeiden, für statische Sachen wie diese ist es praktisch, vor allem alle Layouts einzustellen. – ymoreau

Antwort

3

Sie können mit C++ 11 Range-based for loop mit einem braced-init-list, die die Widgets, die Sie hinzufügen möchten enthält, etwa so:

for(auto label : {l1, l2, l3}) 
    qVB->addWidget(label); 
+0

Tatsächlich sind l1, l2, l3 nur Illustrationsvariablennamen. In der App, die ich schreibe, sind sie 'QLabel userNames',' QLabel age', 'QLabel dOB'. –

+0

Es ist sicherlich besser, in diesem Kontext Variablennamen ('l1',' l2', 'l3') zu verwenden, anstatt' userNames', 'age',' dOB' zu verwenden. Die Frage/Antwort sollte die kleinstmögliche Menge an Lärm. Der Leser sollte in der Lage sein, die Idee zu bekommen, ohne all diese nicht verwandten Namen lesen zu müssen. . . – Mike

+1

Verschiedene Variablennamen haben überhaupt nichts mit der Frage zu tun. Entschuldigung, aber ich bekomme deinen Kommentar nicht. . . – Mike

2

Wenn Sie wirklich wollen, sind Ihre Art Last etwas reduzieren würde TU es.

std::vector<std::string> names = {"l1", "l2", "l3", .......}; 
for(std::string name : names) 
    qVB->addWidget(new QLabel(name.c_str())); 
Verwandte Themen