作为一个非常简单的示例,我想在按下按钮时在 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 窗体(并且因为我不需要从类中的其他地方访问该对象),我更熟悉以下模式:
button1_Clicked(object sender, EventArgs e) {
  ChildWindow f = new ChildWindow();
  f.Show();
}
局部变量意味着我没有另一个实例字段,而且窗口不会在内存中停留比必要的时间更长的时间。将其直接翻译成 C++ 会有点难看,因为事后没人会澄清。我尝试了以下事情:
- shared_ptr. 不走运,- delete只要方法结束,窗口就会 d,这意味着新窗口会出现一瞬间然后又消失了。不太好。
- exec()而不是- show(). 这适用于模态对话框,但文档似乎暗示它也会停止事件循环,- QApplication::processEvents()如果仍需要更新,您应该定期调用。我在这里了解得很少,但我想这也不太好。
- deleteLater(). 可悲的是,仅显示一个窗口并不会阻塞- deleteLater,因此它一出现就消失了。
关闭窗口后是否有一个不错的选择来清理它?