我用这个代码:
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)
是的。除非你通过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);则不可行。这也是危险的,如果您不小心,可能会导致访问冲突/分段错误。
| 归档时间: |
|
| 查看次数: |
1717 次 |
| 最近记录: |