it-swarm.com.de

Korrekter Weg, ein Qt-Programm zu beenden?

Wie soll ich ein Qt-Programm beenden, z. B. beim Laden einer Datendatei, und dabei die Beschädigung der Datei feststellen, und der Benutzer muss diese App beenden oder die Datendatei erneut starten?

Sollte ich:

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

Und Unterschied zwischen (2) und (3)?

108
daisy

QApplication wird von QCoreApplication abgeleitet und erbt dabei quit(), einen öffentlichen Slot von QCoreApplication, sodass zwischen QApplication::quit() und QCoreApplication::quit() kein Unterschied besteht.

Wie wir in der Dokumentation von QCoreApplication::quit() it lesen können, sagt der Anwendung, dass sie mit dem Rückkehrcode 0 (Erfolg) beendet werden soll. ". Wenn Sie den Vorgang beenden möchten, weil Sie eine beschädigte Datei entdeckt haben, möchten Sie möglicherweise nicht mit Rückgabewert Null beenden. Dies bedeutet Erfolg. Sie sollten also QCoreApplication::exit() aufrufen, da Sie einen Rückgabecode ungleich Null angeben können Error.

Es ist wichtig zu beachten, dass "wenn die Ereignisschleife nicht läuft, diese Funktion (QCoreApplication :: exit ()) nichts tut". In diesem Fall sollten Sie exit(EXIT_FAILURE) aufrufen.

124
Bill

Sie können qApp.exit(); aufrufen. Ich benutze das immer und hatte nie ein Problem damit.

Wenn es sich bei Ihrer Anwendung um eine Befehlszeilenanwendung handelt, möchten Sie möglicherweise einen Beendigungscode zurückgeben. Es liegt ganz bei Ihnen, was der Code ist.

27
this.lau_

wenn Sie Ihre Anwendung über main () schließen müssen, können Sie diesen Code verwenden

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

Das Programm wird beendet, wenn OpenSSL nicht installiert ist

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

Beispiel

0
user3777664

Wenn Sie Qt Jambi verwenden, sollte dies funktionieren:

QApplication.closeAllWindows();
0