作为一个非常简单的示例,我想在按下按钮时在 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
,因此它一出现就消失了。
关闭窗口后是否有一个不错的选择来清理它?