2010-07-12 14 views
0

Voici le code que je ne parviens pas à avec:application Qt ne peut être quitter, rester dans la mémoire

QApplication a(argc, argv); 
QString path = qApp->applicationDirPath(); 
qApp->setQuitOnLastWindowClosed(false); 
a.addLibraryPath(path+"/plugins"); 
TryQt w; 
w.show(); 
return a.exec(); 

Voici comment je commence ma demande. Dans l'application (TryQt) je crée plusieurs autres QWidgets et Qwindows. Le problème se pose lorsque je ferme l'application Le QMainWindow disparaît, il semble que le programme se termine, mais il reste dans la mémoire. (Je peux voir à partir de Gestionnaire des tâches/processus). J'attrape aussi le closeEvent dans mon programme TryQt et je ferme tout ce que j'ai pu ouvrir là-bas. Mais toujours pas d'utilisation. Est-ce que quelqu'un a une idée de pourquoi cela se passe?

Répondre

4
bien

, c'est parce que vous appelez

qApp->setQuitOnLastWindowClosed(false); 

les docs disent:

Cette propriété est vérifiée si l'application se ferme implicitement lorsque la fenêtre dernière est fermée.

La valeur par défaut est true.

Si cette propriété est vrai, les applications se ferme lorsque la dernière fenêtre principale visible (à savoir la fenêtre sans parent) avec le Qt :: WA_QuitOnClose attribut défini est fermé. Par défaut, cet attribut est défini sur pour tous les widgets, à l'exception des sous-fenêtres . Reportez-vous à Qt :: WindowType pour obtenir une liste détaillée des objets Qt :: Window .

et vous êtes pour une raison quelconque le définissant sur false.

+0

changer qApp-> setQuitOnLastWindowClosed (false); à Vrai ne changeant toujours rien. il ne quitte pas le programme même si la fenêtre principale a été fermée. – user389423

4

J'ai eu un problème similaire (sauf l'appel qApp->setQuitOnLastWindowClosed(true); comme suggère la réponse précédente). Je soupçonne que l'une des bibliothèques que nous utilisons ne nettoie pas son fil correctement et une enquête est en cours, mais la plus simple solution a consisté à remplacer return a.exec(); avec:

exit(a.exec());