我使用此代码:
MyDialog *md = new MyDialog();
md -> show();
在Qt中打开一个对话框窗口。关闭对话框窗口时会自动删除md
还是窗口完成后需要运行delete md
?
答案 0 :(得分:9)
在您的小段代码中,您需要删除它,因为它没有父级,如果您设置了父级,父级将删除它的子级,您只需要删除& #34;主窗口" (没有父母的窗口)。
对于QWidget派生类,您可以使用:Qt::WA_DeleteOnClose
标志,然后在窗口小部件关闭时释放内存,请参阅文档here
然后代码将成为:
MyDialog *md = new MyDialog();
md->setAttribute(Qt::WA_DeleteOnClose);
md->show();
答案 1 :(得分:3)
是。除非您this
通过,this
是QWidget
或任何其他QWidget
:
MyDialog *md = new MyDialog(this);
md->show();
你需要:
delete md;
在某些时候为了释放它的记忆。此外,在这种情况下,您需要确保object tree链接良好。您还可以在setAttribute(Qt::WA_DeleteOnClose);
上调用md
,这样当您关闭对话框时,其内存也会在Zlatomir
表示时释放。但是,如果您需要md
在关闭后才能生效setAttribute(Qt::WA_DeleteOnClose);
,则无法选择。这也很危险,如果你不小心,可能会导致访问冲突/分段错误。