Im allgemeinen Fall, wenn die Daten recht einfach ist Ich mag erstellen oder mehr benutzerdefinierte Signale und emittieren diese nach Bedarf. Einfache oder komplexe Daten, ich werde in der Regel Accessoren für die Daten bereitstellen. Im komplexen Fall würde ich dann einen Steckplatz mit dem Signal accepted
verbinden und die gewünschten Informationen in diesem Steckplatz abrufen. Der Nachteil besteht darin, dass Sie sich im Allgemeinen darauf verlassen müssen, einen Zeiger auf das Dialogfeld zu speichern oder mithilfe des Hacks sender()
herauszufinden, welches Objekt den Slot ausgelöst hat.
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.
}
Das ist wahr, wenn der Dialog modal ist ... In meinem Fall war es, aber ich dachte nur, wie würden Sie das in einem nicht-modalen Dialog tun? Ich nehme an, dass das akzeptierte Signal des Dialogs mit einem Steckplatz verbunden wird, wo Sie dieselben Dinge tun wie oben. – teukkam
Es ist also nicht nötig, ein benutzerdefiniertes Signal vom 'accept()' Slot zu senden. Das 'connect'-Signal scheint das richtige zu sein. – tibur