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

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

最佳答案

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

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

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

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

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

相关文章:

c++ - std::sort 使用函数作为比较器,不起作用?

python - 如何从 node.js 调用外部脚本/程序

c++ - 使用 c++ eigen 库的未知错误

dialog - 我如何使用 Gtk 在对话框中询问用户一些事情?

c++ - 我如何知道用于与我的串行端口通信的十六进制?

java - Android - 自定义对话框

c++ - 检查调用shared_from_this()是否有效的方法?

multithreading - 可以取消并报告进度的QFuture

c++ - Qt : reference to non-static member function must be called

qt - 如何将子项动态附加到具有子项别名的 QML 项