Qt 5 QFormLayout 隐藏一行 或 重新布局

Qt 5 QFormLayout 隐藏一行 或 重新布局 通过takeRow删除指定行,且不删除对应的label和field的QWidget,这些QWidget由自己管理。

初始化QFormLayout ,并保存lb1,le1,lb2,le2

lb1 = new QLabel("11111");
le1= new QLineEdit(ui->centralwidget);
ui->formLayout->addRow(lb1 ,le1);

lb2 = new QLabel("22222");
le2= new QLineEdit(ui->centralwidget);
ui->formLayout->addRow(lb2 ,le2);

在需要更新布局时,先takeRow,然释放labelItem和fieldItem的内存,并且需要隐藏lb和le。

for(int i=ui->formLayout->rowCount()-1;i>=0;--i)
{
    QFormLayout::TakeRowResult result = ui->formLayout->takeRow(i);

    QWidget* lb = result.labelItem->widget();
    QWidget* le = result.fieldItem->widget();

    lb->hide();
    le->hide();

    delete result.labelItem;
    delete result.fieldItem;
}    

 然后重新addRow指定行,在加入前重新显示lb和le

lb2->show();
le2->show();
ui->formLayout->addRow(lb2,le2);

 

posted @ 2025-06-16 13:18  上位机  阅读(87)  评论(0)    收藏  举报