gpt4 book ai didi

c++ - 为什么我的删除按钮没有删除 QHBoxLayout 上的所有小部件

转载 作者:行者123 更新时间:2023-11-28 01:31:04 26 4
gpt4 key购买 nike

我在删除 QHBoxLayout 上的小部件时遇到问题。我使用 QList 列出我的布局,因为我在运行时添加布局。这是我的 QList

QList<QHBoxLayout*> hBoxLayoutParent;

这是我添加小部件时的代码

hBoxLayoutParent.push_back(createNewHBoxParent());
hBoxLayoutParent.last()->addWidget(label);
hBoxLayoutParent.last()->addWidget(cmbBox);
hBoxLayoutParent.last()->addWidget(cmbJurusan);
hBoxLayoutParent.last()->addWidget(listButton.last());
ui->formLayout_2->addLayout(hBoxLayoutParent.last());

这就是我删除它们的方式

for(int i = 0; i < hBoxLayoutParent[index]->count(); i++)
{
delete hBoxLayoutParent[index]->takeAt(0)->widget();
qDebug() << "Widget Number: " << hBoxLayoutParent[index]->count();
}
hBoxLayoutParent.removeAt(index);

当我点击删除按钮时,并不是所有的都被删除了。cmbJurusan 仍然存在。

最佳答案

问题是您的 for 循环没有按照您认为的那样计算。你有...

for (int i = 0; i < hBoxLayoutParent[index]->count(); i++)

因此,您在每次迭代时递增 i。但是……

delete hBoxLayoutParent[index]->takeAt(0)->widget();

将从 hBoxLayoutParent[index] 中删除一个项目。因此,您正在修改 QHBoxLayout 迭代其项目 - 每次迭代都会将 i 增加 1,但也会将布局中的项目数量减少 1。

相反,尝试...

while (!hBoxLayoutParent[index]->isEmpty()) {
delete hBoxLayoutParent[index]->takeAt(0)->widget();
qDebug() << "Widget Number: " << hBoxLayoutParent[index]->count();
}

另请注意,如果此代码在事件循环的上下文中运行,那么您可能需要使用 QObject::deleteLater而不是 delete

关于c++ - 为什么我的删除按钮没有删除 QHBoxLayout 上的所有小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51473109/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com