使用函数调用缩小QDialog

时间:2011-06-03 19:02:30

标签: c++ qt dialog runtime

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

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);
}

1 个答案:

答案 0 :(得分:2)

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

在调用deleteLater()之前,您是否尝试从他们所处的布局中删除子窗口小部件?

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

(或者那种效果 - 我只是猜测vbxlytDialogue的类型。)