2016-06-29 20 views
0

如何将我的labels设置为稍后调用的数组?我似乎无法得知什么类型的labels是为了拉断这一切。Qt GUI如何将这些标签放入数组

我所拥有的是这个,但是这样会比较丑陋。 如果我可以改变这个

ui->label_11->setVisible(false); 
ui->label_5->setVisible(false); 
ui->label_12->setVisible(false); 
ui->label_44->setVisible(false); 
ui->label_43->setVisible(false); 
ui->label_9->setVisible(false); 
ui->label_10->setVisible(false); 
ui->label_42->setVisible(false); 

对此,这将是最优选的。但是,也许我正在以错误的方式思考这个问题。

SometypeIdoNotKnow values[7] = {ui->label_11,  
           ui->label_5, 
           ui->label_12, 
           ui->label_44, 
           ui->label_43, 
           ui->label_9, 
           ui->label_10, 
           ui->label_42}; 

for (int i=0; i <= 7; i++){  
    values[i]->setVisible(false);  
} 
+0

顺便说一句,你举的例子有UB。我的意思是'SometypeIdoNotKnow values [7]'then'for(int i = 0; i <= 7; i ++){' – drescherjm

+2

''而不是'QList labels = findChildren ();'哪个会给你一个全部列表父窗口小部件中存在的标签。 – drescherjm

+1

SometypeIdoNotKnow是'QLabel *' – drescherjm

回答

2

如果你的编译器是不是古代,使用C++ 11:

// If you only want to iterate some labels 
auto const labels = {ui->label_11, ui->label_12, ui->label_44, 
        ui->label_43, ui->label_9, ui->label_10, 
        ui->label_42}; 
// If you want to iterate all labels 
auto labels = findChildren<QLabel*>(); 

for (auto label : labels) label->hide(); 
+0

什么是自动类型?这真的很酷,这是如何工作:)谢谢你给我看 – tisaconundrum

+0

也如何得到某个父母下的所有孩子?在'verticalLayout'下说' – tisaconundrum

+0

@tisaconundrum布局不是'QObject'父类意义上的父类。由[给定的布局管理的小部件的迭代由[此问题]覆盖(http://stackoverflow.com/q/31546511/1329652)。 –

0

谢谢@drescherjm的答案。
这似乎工作。

QLabel* values[7] = {ui->label_11, 
        ui->label_12, 
        ui->label_44, 
        ui->label_43, 
        ui->label_9, 
        ui->label_10, 
        ui->label_42}; 
for (int i = 0; i < 7; i++){  
    values[i]->setVisible(false); 
    qDebug() << i;     
}