Qt4 在此处使用deleteLater()删除发件人()是否安全?
假设某个插槽被某个基于QDialog的类调用 我在其他地方创建对话框,例如Qt4 在此处使用deleteLater()删除发件人()是否安全?,qt4,Qt4,假设某个插槽被某个基于QDialog的类调用 我在其他地方创建对话框,例如 MyDialog *dlg = new MyDialog (this); connect (dlg , SIGNAL(valueSet(QString)) , SLOT(slotGetValue(QString))); dlg->exec (); 在插槽中,我通过删除对象的“最深”父类(即QObject)来删除对象: void slotGetValue (const QString & key)
MyDialog *dlg = new MyDialog (this);
connect (dlg , SIGNAL(valueSet(QString)) , SLOT(slotGetValue(QString)));
dlg->exec ();
在插槽中,我通过删除对象的“最深”父类(即QObject)来删除对象:
void slotGetValue (const QString & key)
{
// process the value we retrieved
// now delete the dialog created
sender()->deletLater ();
}
这是正确的做法吗?这样安全吗?应该没有理由删除模式对话框。由于QDialog::exec()阻塞,因此可以在对话框返回后立即安全地删除该对话框
MyDialog *dlg = new MyDialog (this);
connect (dlg , SIGNAL(valueSet(QString)) , SLOT(slotGetValue(QString)));
dlg->exec ();
delete (dlg);
从这一点上,您可能可以猜到不需要使用new和delete。您只需将它放在堆栈上,它在离开作用域时就会被销毁。像这样:
MyDialog dlg(this);
connect(&dlg, SIGNAL(valueSet(QString)) , SLOT(slotGetValue(QString)));
dlg.exec();
除非在MyDialog构造函数中需要this指针,否则没有理由传递它