QVBoxLayout添加所有小部件

时间:2017-03-06 22:15:08

标签: java c++ qt qlayout

我正在尝试将一些 QLabel 添加到 QVBoxLayout 中:

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 ++中是否有类似的东西可以让我减少打字?

2 个答案:

答案 0 :(得分:3)

您可以将C ++ 11 Range-based for loopbraced-init-list一起使用,其中包含您要添加的小部件,如下所示:

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

答案 1 :(得分:2)

如果你真的想减少你的类型负载,就会这样做。

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