簡體   English   中英

使用 Function 調用縮小 QDialog

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM