Modo corretto per uscire da un programma Qt?


129

Come devo uscire da un programma Qt, ad esempio durante il caricamento di un file di dati, e scoprire il danneggiamento dei file e l'utente deve chiudere questa app o riavviare il file di dati?

Dovrei:

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

E la differenza tra (2) e (3)?

Risposte:


145

QApplication deriva da QCoreApplication e quindi eredita quit()quale slot pubblico di QCoreApplication, quindi non c'è differenza tra QApplication::quit()e QCoreApplication::quit().

Come possiamo leggere nella documentazione di QCoreApplication::quit()esso "dice all'applicazione di uscire con il codice di ritorno 0 (successo)." . Se vuoi uscire perché hai scoperto la corruzione del file, potresti non voler uscire con il codice di ritorno zero che significa successo, quindi dovresti chiamareQCoreApplication::exit() perché puoi fornire un da zero che, per convenzione, indica un errore.

È importante notare che "se il ciclo degli eventi non è in esecuzione, questa funzione (QCoreApplication :: exit ()) non fa nulla" , quindi in tal caso è necessario chiamare exit(EXIT_FAILURE).


30

Puoi chiamare qApp.exit(); . Lo uso sempre e non ho mai avuto problemi.

Se l'applicazione è un'applicazione da riga di comando, è possibile che si desideri restituire un codice di uscita. Dipende da te quale sia il codice.


3
Avevo bisogno di fare quanto segue:qApp->exit();
Frederick Ollinger l'


-2

se devi chiudere la tua applicazione da main () puoi usare questo codice

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

Il programma verrà terminato se OpenSSL non è installato


1
Penso che questo non si compili. app.exit (0) non restituisce un int. Usa if(!QSslSocket::supportsSsl()) {return 0;};. Poiché app.exec () non è stato chiamato su questa riga, app.exit (0) non fa nulla, consultare la documentazione di QCoreApplication :: exit (): se il ciclo degli eventi non è in esecuzione, questa funzione non fa nulla.
Sacha Guyer

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

esempio


la domanda non riguarda il distacco di nuovi processi
novellino
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.