web-dev-qa-db-fra.com

Bonne façon de quitter un programme Qt?

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

Devrais-je:

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

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

108
daisy

QApplication est dérivé de QCoreApplication et hérite donc de quit() qui est un emplacement public de QCoreApplication. Il n'y a donc pas de différence entre QApplication::quit() et QCoreApplication::quit().

Comme on peut le lire dans la documentation de QCoreApplication::quit() it "indique à l'application de quitter avec le code retour 0 (succès)." Si vous voulez quitter parce que vous avez découvert un fichier corrompu, vous ne voudrez peut-être pas quitter avec le code retour zéro qui signifie succès. Vous devez donc appeler QCoreApplication::exit() car vous pouvez fournir un code return non-nul Erreur.

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

124
Bill

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 choisir le code.

27
this.lau_

si vous avez besoin de 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 sera terminé si OpenSSL n'est pas installé

//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

0
user3777664

Si vous utilisez Qt Jambi, cela devrait fonctionner:

QApplication.closeAllWindows();
0