¿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)?

margarita
fuente

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).

Cuenta
fuente
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.

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

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

QApplication.closeAllWindows();
Durgarao Maruboina
fuente
-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

Petr Tripolsky
fuente
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

usuario3777664
fuente
la pregunta no es sobre separar nuevos procesos
codificador novato