C++ 如何高效地初始化100个QLabel
我希望能够更新100多个标签,所以我打算将它们放入如下数组中: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; 然后有这
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
)会更好。