Maneira correta de sair de um programa Qt?


129

Como devo encerrar um programa Qt, por exemplo, ao carregar um arquivo de dados e detectar uma corrupção no arquivo, e o usuário precisa sair deste aplicativo ou reiniciar o arquivo de dados?

Eu devo:

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

E diferença entre (2) e (3)?

Respostas:


145

QApplication é derivado de QCoreApplication e, portanto, herda quit()qual é um slot público de QCoreApplication, portanto, não há diferença entre QApplication::quit()e QCoreApplication::quit().

Como podemos ler na documentação QCoreApplication::quit()dele "diz ao aplicativo para sair com o código de retorno 0 (sucesso)". . Se você deseja sair porque descobriu a corrupção do arquivo, talvez não queira sair com o código de retorno zero, o que significa sucesso, então você deve chamarQCoreApplication::exit() porque pode fornecer um returnCode diferente de zero que, por convenção, indica um erro.

É importante observar que "se o loop de eventos não estiver em execução, esta função (QCoreApplication :: exit ()) não fará nada" , portanto, nesse caso, você deve chamar exit(EXIT_FAILURE).


30

Você pode ligar qApp.exit(); . Eu sempre uso isso e nunca tive problemas com isso.

Se seu aplicativo é um aplicativo de linha de comando, você pode realmente querer retornar um código de saída. Depende completamente de você qual é o código.


3
Eu precisava fazer o seguinte:qApp->exit();
Frederick Ollinger 8/17/17


-2

se você precisar fechar seu aplicativo a partir de main (), você pode usar este código

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

O programa será encerrado se o OpenSSL não estiver instalado


1
Eu acho que isso não compila. app.exit (0) não retorna um int. Use if(!QSslSocket::supportsSsl()) {return 0;};. Como app.exec () não foi chamado nessa linha, app.exit (0) não faz nada, consulte a documentação de QCoreApplication :: exit (): se o loop de eventos não estiver em execução, essa função não funcionará.
Sacha Guyer

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

exemplo


a questão não é sobre destacando novos processos
rookie codificador
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.