¿Es seguro eliminar un remitente() con deleteLater() aquí?

Supongamos que alguna clase basada en QDialog llamó a algún espacio,

Creo el diálogo en otro lugar, por ejemplo.

 MyDialog *dlg = new MyDialog (this);
 connect (dlg , SIGNAL(valueSet(QString)) , SLOT(slotGetValue(QString)));
 dlg->exec ();

Y en la ranura, elimino el objeto mediante la eliminación de su clase principal "más profunda", que es QObject:

 void slotGetValue (const QString & key)
 {
    // process the value we retrieved
    // now delete the dialog created
    sender()->deletLater ();
 }

¿Es esa la forma correcta de hacer esto? ¿Es eso seguro?

preguntado el 03 de mayo de 12 a las 15:05

1 Respuestas

No debería haber ninguna razón para eliminar un cuadro de diálogo que es modal. Dado que QDialog::exec() bloquea, el cuadro de diálogo se puede eliminar de forma segura inmediatamente después de que regrese.

MyDialog *dlg = new MyDialog (this);
connect (dlg , SIGNAL(valueSet(QString)) , SLOT(slotGetValue(QString)));
dlg->exec ();
delete (dlg);

A partir de eso, probablemente puedas adivinar que no hay necesidad de usar new y delete. Simplemente puede ponerlo en la pila y se destruirá cuando abandone el alcance. Como esto:

MyDialog dlg(this);
connect(&dlg, SIGNAL(valueSet(QString)) , SLOT(slotGetValue(QString)));
dlg.exec();

Y a menos que necesite el puntero this en el constructor MyDialog, no hay razón para pasarlo.

contestado el 03 de mayo de 12 a las 15:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.