我有一个QVBoxLayout内scrollArea。我动态地添加QFormLayout s。从QVBoxLayout删除所有的孩子
widgetTreeStruct* tree = new widgetTreeStruct(QString::number(numberOfGraphs));
QFormLayout* layout = tree->getTree(); // get QFormLayout
ui->verticalLayout_2->addLayout(layout); //add to the vertical layout
在一个点上,我需要从QVBoxLayout删除所有添加的QFormLayouts。
我尝试了几种方法来做到这一点。
- 使用qDeleteAll()
qDeleteAll(ui->verticalLayout_2->children());
2.删除项目逐一
QLayoutItem* child;
while((child = ui->verticalLayout_2->takeAt(0)) != 0)
{
if(child->widget() != 0)
{
delete child->widget();
}
delete child;
}
但是什么都没有发生。只有当我尝试将项目添加到QVBoxLayout时,再次将新项目添加到先前添加的项目之上。
我感觉到,我不得不重新绘制,重绘,更新,刷新或什么的。我试过ui->verticalLayout_2->update();
,但没有为我工作。
那么,我该怎么办?
事实上,这是正确的做法。 +1 –