如何以有效的方式初始化100 QLabel

时间:2016-10-18 00:51:37

标签: c++ qt

我希望能够更新超过100个标签,所以我打算将它们放在这样的数组中:

voltage_label_array[0] = this->ui->Voltage_0;
voltage_label_array[1] = this->ui->Voltage_1;
voltage_label_array[...] = this->ui->Voltage_2;
voltage_label_array[...n] = this->ui->Voltage_n;

然后有这个方法

void MainWindow::updateValue(int i, int voltage){
    voltage_label_array[i]->setText(QString::number(voltage));
}

但有100行来设置它似乎是一个坏主意。有没有办法在for循环中初始化QLabel数组?

1 个答案:

答案 0 :(得分:2)

如果你需要这样做,你的设计就会出现严重错误。但这是有可能的。

假设您的标签被命名为Voltage_0Voltage_99

for(int i = 0; i < 100; ++i) {
    auto ptr = this->findChild<QLabel*>(QString("Voltage_%1").arg(i));
    voltage_label_array[i] = ptr;
}

这个&#34;解决方案&#34;使用Qt的运行时反射并承担预期的性能损失。

但是如果你需要显示几个相似的值,请查找QListWidget和类似的类。