2016-06-29 17 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;     
}