¿Forma correcta de salir de un programa Qt?


129

¿Cómo debería salir de un programa Qt, por ejemplo, al cargar un archivo de datos y detectar daños en el archivo, y el usuario debe salir de esta aplicación o reiniciar el archivo de datos?

Debería:

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

¿Y la diferencia entre (2) y (3)?

Respuestas:


145

QApplication se deriva de QCoreApplication y, por lo tanto, hereda quit()cuál es un espacio público de QCoreApplication, por lo que no hay diferencia entre QApplication::quit()y QCoreApplication::quit().

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

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


30

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

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 usted cuál es el código.


3
Tenía que hacer lo siguiente:qApp->exit();
Frederick Ollinger


-2

si necesita cerrar su aplicación desde main (), puede usar 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 finalizará si OpenSSL no está instalado


1
Creo que esto no se compila. app.exit (0) no devuelve un int. Uso 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 eventos no se está ejecutando, esta función no hace nada.
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";

ejemplo


la pregunta no es sobre separar nuevos procesos
codificador novato
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.