Bonjour,
J'ai une appli avec une QMainWindow, j'ai fait un slot exit qui la ferme et donc quitte aussi l'application en appelant le slot "close". Tout va bien lorsque j'appelle ce slot normalement depuis un bouton de ma fenêtre.

J'ai aussi une boîte de dialogue affichée au démarrage qui permet de faire certains choix avant d'utiliser l'appli, pour ça j'ai ajouté une fonction showIntro qui ouvre cette boîte de dialogue, récupère des infos puis configure ma fenêtre en conséquence.
Voilà mon main :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    w.showIntro();
 
    return a.exec();
}
Ce qui va ouvrir mon appli et ma fenêtre principale, puis afficher par dessus ma boîte de dialogue (modale). Dans cette boîte de dialogue j'ai laissé la possibilité de quitter l'application, en fait ma fonction showIntro récupère un code correspondant au bouton cliqué sur la boîte de dialogue. Si le code correspond à "quitter" j'appelle alors mon slot exit (dans showIntro donc). Or cela ferme bien ma fenêtre principale mais ne termine pas mon application.

Voilà le code partiel de showIntro :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
DIntro dialog(_applicationMode, this); // _applicationMode est passé par référence et sera affecté dans la boîte de dialogue
dialog.exec();
if(_applicationMode == ApplicationMode::Quit)
{
    exit();
    return;
}
....
J'ai essayé de rajouter "setAttribute(Qt::WA_DeleteOnClose);" dans le constructeur de ma MainWindow, j'ai une erreur "free(): invalid pointer:" lorsque je quitte. Je rappelle que tout quitte normalement lorsque j'appelle mon slot exit() à un autre moment, ça ne pose problème que lorsque je l'appelle de ma fonction showIntro. Alors je suppose que le fait qu'elle soit appelée avant QApplication::exec() peut poser problème, mais je ne vois pas comment faire autrement.

Merci d'avance pour toute suggestion :)