gpt4 book ai didi

c++ - 通过函数调用缩小 QDialog

转载 作者:行者123 更新时间:2023-11-28 03:49:07 25 4
gpt4 key购买 nike

我有一个由中央应用程序创建和管理的对话。对话在运行时生成小部件,并具有将对话恢复为其默认排列的成员函数,即顶部的按钮框和底部的单个小部件。隐藏对话时调用此恢复函数。我可以从对话中取出额外的小部件,但我无法让对话本身缩小到原来的大小。这是我正在使用的代码,名称已更改为通用名称。

void Dialogue::restore()
{
const short RESTORE_WIDTH = 800;
const short RESTORE_HEIGHT = 200;
QRect newGeometry(frameGeometry());

// Remove all old origins
foreach(RuntimeWidget* child, findChildren< RuntimeWidget* >())
child->deleteLater();

// Restore widget to default state
newGeometry.setWidth(RESTORE_WIDTH);
newGeometry.setHeight(RESTORE_HEIGHT);
setGeometry(newGeometry);
updateGeometry();
addRuntimeWidget();
}

void Dialogue::addRuntimeWidget()
{
RuntimeWidget* pWidget(new RuntimeWidget());

vbxlytDialogue->addWidget(pWidget);
adjustSize();
adjustPosition(this);
pWidget->setFocus(Qt::OtherFocusReason);
}

最佳答案

我猜你在这里使用 deleteLater 有问题。只有当您返回到主事件循环时,子部件才会被删除,并且只会在 restore() 完成后(即在您调用 调整大小)。

在调用 deleteLater() 之前,您是否尝试过从它们所在的任何布局中删除子小部件?

foreach(RuntimeWidget* child, findChildren< RuntimeWidget* >()) {
vbxlytDialogue->removeWidget(child);
child->deleteLater();
}

(或者类似的东西 - 我只是在猜测 vbxlytDialogue 的类型。)

关于c++ - 通过函数调用缩小 QDialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6231494/

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