假设一些基于QDialog的类调用了一些插槽,
我在其他地方创建了对话框,例如
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 ();
}
这是正确的做法吗?这样安全吗?
答案 0 :(得分:1)
没有理由删除模态对话框。由于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指针,否则没有理由传递它。