gpt4 book ai didi

qt - 如何在Qt中显示一个窗口并在关闭后立即将其删除?

转载 作者:行者123 更新时间:2023-12-04 05:18:51 28 4
gpt4 key购买 nike

作为一个非常简单的示例,我想在按下按钮时在Qt中显示一个对话框。通常的模式(在我当前正在处理的应用程序中)如下所示:

class MainWindow {
...
private slots:
buttonClicked();
...
private:
ChildWindow * childWindow;
}

MainWindow::MainWindow(QWidget * parent) : QWidget(parent) {
...
childWindow = new ChildWindow(this);
...
}

MainWindow::buttonClicked() {
childWindow.show();
}

来自.NET和Windows Forms(并且因为我不需要从类中的其他位置访问该对象),因此我更熟悉以下模式:
button1_Clicked(object sender, EventArgs e) {
ChildWindow f = new ChildWindow();
f.Show();
}

局部变量意味着我没有另一个实例字段,并且该窗口不会在内存中停留比所需时间更长的时间。直接将其转换为C++会比较麻烦,因为此后没有人会解决。我尝试了以下操作:
  • shared_ptr。运气不好,该方法一结束,该窗口就会被delete d取代,这意味着新窗口会瞬间出现并再次消失。不太好。
  • exec()而不是show()。这将适用于模式对话框,但是文档似乎暗示它还会停止事件循环,并且如果仍需要更新,则应定期调用QApplication::processEvents()。我在这里了解得很少,但我想也不太好。
  • deleteLater()。可悲的是,仅显示一个窗口并不会阻止deleteLater,因此它一出现就会消失。

  • 关闭窗口后,有没有清理窗口的好方法?

    最佳答案

    childWindow->setAttribute( Qt::WA_DeleteOnClose );

    还要注意,调用 exec()将阻止执行调用事件循环,但会生成自己的事件循环,因此不需要调用 processEvents()

    关于qt - 如何在Qt中显示一个窗口并在关闭后立即将其删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15814626/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com