我正在努力创建一个界面,该界面可以动态生成带有布局的QgroupeBox,我可以获取所需的groupebox数量,并且可以完美地工作。现在我想使用一个按钮销毁这些groupBox,以进行同一操作的重复部分(获取所需的groupeBox数量并创建它们)

这是我用于此的代码:

void interface::on_pushButton_12_clicked(){
int i,k;
ui->pushButton_13->setEnabled(true);
QGroupBox *first = new QGroupBox(this);
QVBoxLayout *test = new QVBoxLayout;

k = recupEdit();

ui->pushButton_12->hide();
ui->lineEdit->hide();
ui->label->hide();

for(i = 1; i<=k;i++)
   {
    first = creatgroupebox();

    test->addWidget(first);
    test->addStretch(1);
    ui->tab->setLayout(test);
}
}
int interface::recupEdit(){
int k;
QString recup = ui->lineEdit->text();

k = recup.toInt(0,10);
return k;
}
QGroupBox *interface::creatgroupebox()
{
QGroupBox *group = new QGroupBox(this);
QLineEdit *Id = new QLineEdit("Id");
QLineEdit *Data1 = new QLineEdit("Data 1");
QLineEdit *Data2 = new QLineEdit("Data 2");
QLineEdit *Data3 = new QLineEdit("Data 3");
QLineEdit *Data4 = new QLineEdit("Data 4");
QLineEdit *Data5 = new QLineEdit("Data 5");
QLineEdit *Data6 = new QLineEdit("Data 6");
QLineEdit *Data7 = new QLineEdit("Data 7");
QLineEdit *Data8 = new QLineEdit("Data 8");


QHBoxLayout *layout = new QHBoxLayout;

layout->addWidget(Id);
layout->addWidget(Data1);
layout->addWidget(Data2);
layout->addWidget(Data3);
layout->addWidget(Data4);
layout->addWidget(Data5);
layout->addWidget(Data6);
layout->addWidget(Data7);
layout->addWidget(Data8);

group->setLayout(layout);



return group;
}
void interface::on_pushButton_13_clicked()
{

ui->pushButton_12->show();
ui->lineEdit->show();
ui->label->show();
}

最佳答案

您可以使用QObject :: children()获取所有子对象。

auto gb = new QGroupBox();
gb->setLayout(new QHBoxLayout());
gb->layout()->addWidget(new QLineEdit());

foreach (QObject *o, gb->layout()->children()) {
    auto le = qobject_cast<QLineEdit*>(o);
    if (!le)
        continue;
    //do what you need with your linedit
}


是你想要的吗?

10-06 01:56