Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何高效地初始化100个QLabel_C++_Qt - Fatal编程技术网

C++ 如何高效地初始化100个QLabel

C++ 如何高效地初始化100个QLabel,c++,qt,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; 然后有这

我希望能够更新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
数组

如果您需要这样做,那么您的设计有严重的问题。但这是可能的

假设您的标签名为
Voltage\u 0
Voltage\u 99

for(int i = 0; i < 100; ++i) {
    auto ptr = this->findChild<QLabel*>(QString("Voltage_%1").arg(i));
    voltage_label_array[i] = ptr;
}
for(int i=0;i<100;++i){
自动ptr=this->findChild(QString(“电压_%1”).arg(i));
电压标签阵列[i]=ptr;
}
此“解决方案”使用Qt的运行时反射,并带来预期的性能损失


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

如果它们都是单独的变量,则不需要。也许有一种方法可以让Qt的UI编译器把它们放在一个数组中,或者你可以使用QListWITGET或QTable WistGET来代替。你可以考虑以编程方式构建你的GUI(例如用一个for循环中的“新QLabor”,用一个QBox布局对象做布局),而不是使用GUI编辑器程序。这比在编辑器中手动构建100多个小部件要快,而且将来更容易维护/更新。应该在
setupUi(this)
调用小部件的构造函数后立即进行查找,找到正确的父小部件的子部件,这样就不会有任何性能损失。虽然在循环中创建子窗口小部件比将它们放在
.ui
文件中要简单得多。当然,使用视图小部件(
QListWidget
QListView
)会更好。