2011-11-06 9 views
96

Come si deve uscire da un programma Qt, ad esempio quando si carica un file di dati e si scopre la corruzione del file e l'utente deve uscire da questa app o riavviare il file di dati?Modo corretto per uscire da un programma Qt?

Dovrei:

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

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

risposta

107

QApplication è derivato da QCoreApplication e quindi eredita quit() che è una fessura pubblica di QCoreApplication, quindi non c'è differenza tra QApplication::quit() e QCoreApplication::quit().

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

E 'importante notare che "se il ciclo degli eventi non è in esecuzione, questa funzione (QCoreApplication :: exit()) non fa nulla", quindi in questo caso si dovrebbe chiamare exit(EXIT_FAILURE).

27

È possibile chiamare qApp.exit();. Lo uso sempre e non ho mai avuto problemi con esso.

Se l'applicazione è un'applicazione a riga di comando, è possibile che si desideri effettivamente restituire un codice di uscita. Sta a te decidere quale sia il codice.

+0

Non funziona in Qt5 – YumYumYum

+1

Qt5 ha funzionato QApplication :: quit() – YumYumYum

+0

Avevo bisogno di fare quanto segue: 'qApp-> exit();' –

1

se è necessario chiudere l'applicazione da main() è possibile utilizzare questo codice

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

Il programma sarà terminato, se non è installato OpenSSL

+0

Penso che questo non si compili. app.exit (0) non restituisce un int. Usa 'if (! QSslSocket :: supportsSsl()) {return 0;};'. Poiché app.exec() non è stata chiamata su questa riga, app.exit (0) non fa nulla, consulta la documentazione di QCoreApplication :: exit(): _Se il ciclo degli eventi non è in esecuzione, questa funzione non fa nulla._ –

-2

Se stai usando Qt Jambi, questo dovrebbe lavoro:

QApplication.closeAllWindows(); 
0
//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"; 

example

+0

Sarà più facile da leggere se si aggiusta la formattazione del codice. – Shashanth