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