我目前面临以下问题: 我有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?
直接定义答案 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文档。