我目前面临以下问题:我有 64 个标签。Label_1 一直到 Label_64。我也有一个 int i。“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 直接定义?
您可以存储QLabel
s的列表。
QList<QLabel*> labels;
labels.at(i)->setPixmap(pix)
这种方法的缺点是你应该为每个 i 从 1 到 64 手动分配 ui->label_i 到 labels.at(i) 一次:
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 处,则可以按如下方式访问标签 i:
QVBoxLayout *layout = ...;
QLabel *label = qobject_cast<QWidget*> (layout->itemAt(i)->widget ());
if (label) // should be true if assumption is correct
label->setPixmap(pix);
您也可以使用方法二来初始化方法一的列表。
有关更多信息,请参阅 Qt 文档。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句