从Q开始关闭QDialog时,请致电Destructor

Call destructor when closing QDialog started from Q

本文关键字:请致电 Destructor QDialog 开始      更新时间:2023-10-16

我做了一个自定义对话框,该对话框是从qdialog派生的。如果我关闭对话框,则不会调用攻击器。这是我在类AWidget中打开对话框test的方式。testAWidget的成员:

//In AWidget:
test = new myDialog();
test->show();
...

如果我关闭此对话框,则对话框test是(当然?)未删除/破坏。

我必须在AWidget的破坏者中这样做:

Destructor of AWdiget:
delete test;

myDialog消耗了很多内存。用户行为是打开myDialog,在其中工作,关闭它,但要让AWidget打开。

关闭时如何将内存分配/调用myDialog test的删除器?

编辑

可能有比以下方式更好的方法:

void myDiaglog::closeEvent(QCloseEvent* event){
delete this;
}

如果要在关闭对话框后始终删除该对话框,则可以使用Qt::WA_DeleteOnClose

使QT删除该小部件后,小部件接受了关闭 事件(请参阅qwidget :: colestevent())。

//In AWidget:
test = new myDialog();
test->setAttribute (Qt::WA_DeleteOnClose);
test->show();
...

而不是:

test->show(); // async call

尝试以下操作:

test->exec(); // blocking call

在这种情况下,setAttribute(Qt::WA_DeleteOnClose, true);test->setAttribute (Qt::WA_DeleteOnClose);都没有帮助。