gpt4 book ai didi

c++ - 删除布局中的小部件

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:30:36 24 4
gpt4 key购买 nike

如果我们为布局中的 widget 运行 delete widget 会发生什么?如果这个案例写在文档中,请给我链接(我没有找到)。

代码示例:

QLabel *l1 = new QLabel("1st");
QLabel *l2 = new QLabel("2nd");
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(l1);
layout->addWidget(l2);

QWidget *mainWidget = new QWidget;
mainWidget->setLayout(layout);
mainWidget->show();

delete l1;
l2->deleteLater();

l1l2 会发生不同的事情吗?

最佳答案

我相信你所做的几乎是一样的,尽管它们都不能按照你应该做的方式正确地从布局中删除。它们仍然作为布局中的不良引用(如果我没记错的话)

第一个现在只是删除项目。一旦控件返回到事件循环,第二个将删除它。但实际上,人们通常从布局中删除项目的方式是将它们从布局中删除(给它一个 self 调整的机会),然后删除项目及其小部件(如果需要)。

QLayoutItem *child;
while ((child = layout->takeAt(0)) != 0) {
delete child->widget();
delete child;
}

同样,删除小部件 (child->widget()) 仅当您想要销毁添加的小部件以及持有它的布局项时才需要。

关于c++ - 删除布局中的小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12020015/

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