[英]Shrinking QDialog With Function Call
我有一個由中央應用程序創建和管理的對話。 對話框在運行時生成小部件,並有一個成員 function 將對話框恢復為其默認排列,即頂部的按鈕框和底部的單個小部件。 在隱藏對話時調用此恢復 function。 我可以從對話中取出額外的小部件,但我不能讓對話本身縮小到原來的大小。 這是我正在使用的代碼,名稱已更改為通用名稱。
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
有問題。 只有在您 go 回到主事件循環后,子小部件才會被刪除,並且只會在restore()
完成后(即在您調用adjustSize
之后)發生。
在調用deleteLater()
之前,您是否嘗試過從它們所在的任何布局中刪除子小部件?
foreach(RuntimeWidget* child, findChildren< RuntimeWidget* >()) {
vbxlytDialogue->removeWidget(child);
child->deleteLater();
}
(或類似的東西 - 我只是在猜測vbxlytDialogue
的類型。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.