2011-11-06 17 views
96

¿Cómo debo cerrar un programa de Qt, por ejemplo, al cargar un archivo de datos, y descubrir daños en el archivo, y el usuario debe salir de esta aplicación o reiniciar el archivo de datos?¿Forma correcta de salir de un programa Qt?

¿Debo:

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

Y diferencia entre (2) y (3)?

Respuesta

107

QApplication se deriva de QCoreApplication y por lo tanto hereda quit() que es una ranura público del QCoreApplication, lo que no hay diferencia entre QApplication::quit() y QCoreApplication::quit().

Como podemos leer en la documentación de quit(), "le dice a la aplicación que salga con el código de retorno 0 (correcto)".. Si desea salir porque descubrió daños en el archivo, puede que no desee salir con el código de retorno cero, lo que significa éxito, por lo que debe llamar al QCoreApplication::exit() porque puede proporcionar un código de retorno distinto de cero que, por convención, indica un error.

Es importante señalar que "si el bucle de eventos no se está ejecutando, esta función (QCoreApplication :: exit()) no hace nada", por lo que en ese caso, debería llamar exit(EXIT_FAILURE).

27

Puede llamar al qApp.exit();. Siempre uso eso y nunca tuve un problema con eso.

Si su aplicación es una aplicación de línea de comandos, es posible que desee devolver un código de salida. Depende completamente de ti lo que es el código.

+0

No funciona en Qt5 – YumYumYum

+1

Qt5 esto funcionó QApplication :: quit() – YumYumYum

+0

Necesitaba hacer lo siguiente: 'qApp-> exit();' –

1

si es necesario cerrar la aplicación desde main() se puede utilizar este código

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

El programa será terminado si OpenSSL no está instalado

+0

Creo que esto no se compila. app.exit (0) no devuelve un int. Use 'if (! QSslSocket :: supportsSsl()) {return 0;};'. Como no se ha llamado a app.exec() en esta línea, app.exit (0) no hace nada, consulte la documentación de QCoreApplication :: exit(): _Si el bucle de evento no se está ejecutando, esta función no hace nada._ –

-2

Si está utilizando Qt Jambi, esto debería trabajo:

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

Será más fácil de leer si arregla el formato del código. – Shashanth

Cuestiones relacionadas