是否有必要删除Qt中的对话窗口指针?

use*_*077 4 c++ qt

我用这个代码:

MyDialog *md = new MyDialog();
md -> show();
Run Code Online (Sandbox Code Playgroud)

在Qt中打开一个对话框窗口.md关闭对话框窗口时会自动删除,还是delete md在窗口完成后需要运行?

Zla*_*mir 10

在你的小代码中你需要删除它,因为它没有父代,如果你设置父代,父代将删除它的子代,你只需要删除"主窗口"(不是那个窗口)没有父母).

同样对于QWidget派生类,您可以使用:Qt::WA_DeleteOnCloseflag,然后在窗口小部件关闭时释放内存,请参阅此处的文档 然后代码将变为:

MyDialog *md = new MyDialog();
md->setAttribute(Qt::WA_DeleteOnClose);
md->show();
Run Code Online (Sandbox Code Playgroud)


Iul*_*liu 5

是的。除非你通过thiswhile thisis aQWidget或任何 other QWidget

MyDialog *md = new MyDialog(this);
md->show();
Run Code Online (Sandbox Code Playgroud)

你需要:

delete md;
Run Code Online (Sandbox Code Playgroud)

在某个时候为了释放其内存。在这种情况下,您还需要确保对象树链接良好。您还可以做的是调用,setAttribute(Qt::WA_DeleteOnClose);以便md当您关闭对话框时,它的内存也将被释放,如上所述Zlatomir。但是,如果您需要md在关闭后居住,setAttribute(Qt::WA_DeleteOnClose);则不可行。这也是危险的,如果您不小心,可能会导致访问冲突/分段错误。

  • 需要澄清的是,不仅仅是“this”——任何小部件父级都重要。 (4认同)