En el caso general, si los datos son bastante simples me gusta crear uno o más señales personalizadas y emitirlas según sea necesario. Datos simples o complejos, generalmente proporcionaré descriptores de acceso para los datos. En el caso complejo, entonces, conectaría una ranura a la señal accepted
y obtendría la información deseada en esa ranura. La desventaja de esto es que generalmente necesita confiar en el almacenamiento de un puntero al diálogo, o usar el truco sender()
para descubrir qué objeto activó el espacio.
void Foo::showDialog()
{
if (!m_dlg)
{
m_dlg = new Dialog(this);
connect(m_dlg, SIGNAL(accepted()), SLOT(onDialogAccepted()));
}
m_dlg->Setup(m_bar, m_bat, m_baz);
m_dlg->show();
}
void Foo::onDialogAccepted()
{
m_bar = m_dlg->bar();
m_bat = m_dlg->bat();
m_baz = m_dlg->baz();
// optionally destroy m_dlg here.
}
Esto es cierto si el diálogo es modal ... En mi caso, sí, pero yo estaba pensando ¿cómo harías esto en un diálogo no modal? Supongo que conecta la señal aceptada del diálogo a una ranura donde haces lo mismo que arriba. – teukkam
Por lo tanto, no es necesario emitir una señal personalizada desde la ranura 'accept()'. La señal 'connect' parece ser la apropiada. – tibur