CucumberTim
CucumberTim

Reputation: 13

Qt Creator label value

I currently face the following problem: I have 64 labels. Label_1 all the way up to Label_64. I also have an int i. "i" also goes from 1-64

I want that, when i == 1 Label_1 shall display an image. If i == 2, Label_2 shall display that image and so on.

Currently I'd do that with:

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);
}

...

Is there some way to do that easier? Something like:

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

where the choosen label is directly defined by i?

Upvotes: 1

Views: 466

Answers (1)

m7913d
m7913d

Reputation: 11064

You can store a list of QLabels.

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

The disadvantage of this method is that you should manually assign ui->label_i to labels.at(i) for every i from 1 to 64 once:

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);

Depending on your specific case, you may use a more tricky solution. For example, if all the labels are stored in a QVBoxLayout at position 1 to 64, you can access label i as follows:

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

You can also use method two to initialise the list of method 1.

See the Qt documentation for more information.

Upvotes: 1

Related Questions