In the general case, if the data is fairly simple I like to create one or more custom signals and emit those as necessary. Simple or complex data, I will generally provide accessors for the data. In the complex case, then, I would connect a slot to the accepted
signal, and get the desired information in that slot. The drawback to this is that you generally need to rely on storing a pointer to the dialog, or using the sender()
hack to figure out which object triggered the slot.
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.
}