Qt Creator标签值

时间:2017-04-09 19:11:47

标签: image qt label

我目前面临以下问题: 我有64个标签。 Label_1一直到Label_64。 我也有一个int i。 “我”也是1-64

我想要,当i == 1 Label_1将显示图像。如果i == 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);

选择标签由i?

直接定义

1 个答案:

答案 0 :(得分:1)

您可以存储QLabel s。

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

这种方法的缺点是你应该手动将ui-&gt; 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);

根据您的具体情况,您可能会使用更棘手的解决方案。例如,如果所有标签都存储在位置1到64的QVBoxLayout中,则可以按如下方式访问标签i:

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文档。