Dans le cas général, si les données sont assez simple, j'aime créer un ou plusieurs signaux personnalisés et émettre ceux-ci si nécessaire. Données simples ou complexes, je fournirai généralement des accesseurs pour les données. Dans le cas complexe, alors, je voudrais connecter un slot au signal accepted
, et obtenir les informations souhaitées dans ce slot. L'inconvénient de ceci est que vous devez généralement compter sur le fait de stocker un pointeur sur la boîte de dialogue, ou en utilisant le hack sender()
pour déterminer quel objet a déclenché l'emplacement.
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.
}
Cela est vrai si la boîte de dialogue est modale ... Dans mon cas c'était le cas, mais je pensais juste comment le feriez-vous dans un dialogue non-modal? Je suppose que connecter le signal accepté de la boîte de dialogue à un emplacement où vous faites la même chose que ci-dessus. – teukkam
Donc, pas besoin d'émettre un signal personnalisé depuis l'emplacement 'accept()'. Le signal 'connect' semble être le bon. – tibur