В общем случае, если данные довольно просты, мне нравится создавать один или несколько пользовательских сигналов и излучать их по мере необходимости.Простые или сложные данные, я, как правило, предоставлю средства доступа к данным.Тогда в сложном случае я бы подключил слот к сигналу accepted
и получил бы нужную информацию в этом слоте.Недостатком этого является то, что вам обычно нужно полагаться на сохранение указателя на диалоговое окно или использование хака sender()
, чтобы выяснить, какой объект вызвал слот.
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.
}