2017-04-09 138 views
0

我目前面臨以下問題: 我有64個標籤。 Label_1一直到Label_64。 我也有一個int我。 「我」也從1-64Qt Creator標籤值

我想,當我== 1 Label_1應顯示圖像。如果我== 2,Label_2應顯示該圖像等。

目前我會做與:

if(i == 1) 
 
{ 
 
    QPixmap pix("..."); 
 
    ui->label_1->setPixmap(pix); 
 
} 
 

 
if(i == 2) 
 
{ 
 
    QPixmap pix("..."); 
 
    ui->label_2->setPixmap(pix); 
 
} 
 

 
if(i == 3) 
 
{ 
 
    QPixmap pix("..."); 
 
    ui->label_3->setPixmap(pix); 
 
} 
 

 
...

是否有某種方式來做到這一點更容易?喜歡的東西:

QPixmap pix("..."); 
 
    ui->label_i->setPixmap(pix);

,其中已選定的標籤由我直接定義?

感謝您的幫助! :)

+0

附註:在這種情況下,switch語句可能更合適。 – m7913d

回答

0

您可以存儲一列QLabel s。

QList<QLabel*> labels; 
labels.at(i)->setPixmap(pix) 

這種方法的缺點是,你應該手動分配用戶界面 - > label_i到labels.at(i)對於每個i從1到64次:

labels.insert(0, NULL); // empty space to keep numbering the same. 
labels.insert(1, ui->labels_1); 
labels.insert(2, ui->labels_2); 
... 
labels.insert(64, ui->labels_64); 

根據您的具體情況,你可以使用更棘手的解決方案。例如,如果所有的標籤都存儲在一個QVBoxLayout在位置1到64,您可以訪問我的標籤如下:

QVBoxLayout *layout = ...; 
QLabel *label = qobject_cast<QWidget*> (layout->itemAt(i)->widget()); 
if (label) // should be true if assumption is correct 
    label->setPixmap(pix); 

您還可以使用兩個方法來初始化列表的方式1.

有關更多信息,請參閱Qt文檔。

+0

謝謝你的回答! 你可以給我一個如何將ui->標籤分配給labels.at(i)的例子嗎? 只爲我= 1將是偉大的:) – CucumberTim