Comment quitter un programme Qt?


129

Comment dois-je quitter un programme Qt, par exemple lors du chargement d'un fichier de données et de la découverte d'une corruption de fichier, et l'utilisateur doit-il quitter cette application ou relancer le fichier de données?

Devrais-je:

  1. appel exit(EXIT_FAILURE)
  2. appel QApplication::quit()
  3. appel QCoreApplication::quit()

Et la différence entre (2) et (3)?

Réponses:


146

QApplication est dérivé de QCoreApplication et hérite ainsi de quit()qui est un slot public de QCoreApplication, il n'y a donc aucune différence entre QApplication::quit()et QCoreApplication::quit().

Comme nous pouvons le lire dans la documentation de QCoreApplication::quit()celui - ci, "indique à l'application de quitter avec le code retour 0 (succès)". . Si vous souhaitez quitter parce que vous avez découvert une corruption de fichier, vous ne voudrez peut-être pas quitter avec le code de retour zéro, ce qui signifie une réussite, vous devez donc appelerQCoreApplication::exit() car vous pouvez fournir un returnCode différent de zéro qui, par convention, indique une erreur.

Il est important de noter que "si la boucle d'événements n'est pas en cours d'exécution, cette fonction (QCoreApplication :: exit ()) ne fait rien" , donc dans ce cas, vous devez appeler exit(EXIT_FAILURE).


30

Vous pouvez appeler qApp.exit();. J'utilise toujours ça et je n'ai jamais eu de problème avec ça.

Si votre application est une application en ligne de commande, vous pouvez en effet vouloir renvoyer un code de sortie. C'est à vous de décider quel est le code.


3
J'avais besoin de faire ce qui suit:qApp->exit();
Frederick Ollinger


-2

si vous devez fermer votre application depuis main (), vous pouvez utiliser ce code

int main(int argc, char *argv[]){
QApplication app(argc, argv);
...
if(!QSslSocket::supportsSsl()) return app.exit(0);
...
return app.exec();
}

Le programme se terminera si OpenSSL n'est pas installé


1
Je pense que cela ne compile pas. app.exit (0) ne renvoie pas un entier. Utilisez if(!QSslSocket::supportsSsl()) {return 0;};. Parce que app.exec () n'a pas été appelé à cette ligne, app.exit (0) ne fait rien, voir la documentation de QCoreApplication :: exit (): Si la boucle d'événements n'est pas en cours d'exécution, cette fonction ne fait rien.
Sacha Guyer

-5
//How to Run App

bool ok = QProcess::startDetached("C:\\TTEC\\CozxyLogger\\CozxyLogger.exe");
qDebug() <<  "Run = " << ok;


//How to Kill App

system("taskkill /im CozxyLogger.exe /f");
qDebug() << "Close";

exemple


la question n'est pas de détacher de nouveaux processus
codeur débutant
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.