2017-03-06 92 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()));