2017-03-06 31 views
0

我嘗試添加一些QLabelsQVBoxLayoutQVBoxLayout添加所有部件

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); 

在Java中有一個更簡單的方法:

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); 

有Qt \ C++中的任何類似的東西可以讓我做更少的敲擊?

+0

你也可以使用Qt設計器並避免使用代碼,對於這樣的靜態東西來說這很實用,尤其是設置所有的佈局。 – ymoreau

回答

3

您可以使用C++ 11 Range-based for loop與包含您要添加的窗口小部件,像這樣一個braced-init-list

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

實際上l1,l2,l3只是插圖變量名稱。在我寫的應用程序中,它們是'QLabel userNames','QLabel age','QLabel dOB'。 –

+0

在這種情況下使用插圖變量名稱('l1','l2','l3')當然更好,而不是使用'userNames','age','dOB' ...問題/答案應該包含儘可能少的噪音。讀者應該能夠理解而不必讀取所有這些無關的名字。 。 。 – Mike

+1

具有不同的變量名稱根本與問題無關。對不起,但我沒有收到你的評論。 。 。 – Mike

2

如果你真的想降低您的類型的負載像這樣的做到這一點。

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