8
votes

Problème de QmainWindow caché: Application Crashs après QMessageBox est affichée

a.setQuitOnLastWindowClosed(false);

0 commentaires

3 Réponses :


3
votes

Je ne suis pas sûr, mais je pense que lorsque QMessageBox a fermé qu'il tente de revenir au centre de son parent (votre mainwindow) de la sorcière est cachée. Cette opération échoue et le système jette une exception.


3 commentaires

Essayez cette fonction: void mainwindow :: showMessagebox () {qmessagebox :: information (this, "bonjour,", "world!", Qmessagebox :: ok); this-> spectacle (); } with Out Set a.sequittonlastwindowfint (faux); S'il ne va pas écraser - cela signifie qu'il ne pouvait pas retourner concentré sur MainWindow et une exception lancée.


Pass To QMessageBox :: Information (...) NULL au lieu de Ceci . MessageBox n'a maintenant aucun parent, mais l'application se termine.


J'ai réimplenté focalisateur - QMessagoBox n'essaie pas de retourner la mise au point.



3
votes

Le problème semble être le suivant: Lorsque la boîte de dialogue est fermée, l'application pense qu'il n'y a plus de fenêtres ouvertes ( sequitonlastwindowflosed fait référence aux fenêtres de niveau supérieur visibles), donc il quitte donc. Le destructeur de votre fenêtre n'est pas appelé parce que vous ne supprimez jamais l'objet!

Ceci devrait imprimer le message: xxx

Vous pouvez définir la demande comme parent de la fenêtre


1 commentaires

Malheureusement, vous ne pouvez pas définir l'application pour être le parent MAINWINDOW car les relations parent-enfant exigent que le parent est issu de qwidget; Qapplication vient de qObject pas qwidget.



2
votes

Essayez simplement ce qui suit - Mettez ceci: xxx

à votre: xxx

Cela devrait aider!


1 commentaires

Super! Résolu mon problème, merci!