Правильный способ выхода из программы Qt?

Как я должен выйти из программы Qt, например, при загрузке файла данных и обнаружении искажения файла, и пользователю нужно выйти из этого приложения или повторно запустить файл данных?

Должен ли я:

  • вызов exit(EXIT_FAILURE)
  • вызов QApplication::quit()
  • вызов QCoreApplication::quit()

И разница между (2) и (3)?

Ответ 1

QApplication получается из QCoreApplication и тем самым наследует quit(), который является общедоступным слотом QCoreApplication, поэтому нет разницы между QApplication::quit() и QCoreApplication::quit().

Как мы можем прочитать в документации quit(), он "сообщает приложению выйти с кодом возврата 0 (успех)". Если вы хотите выйти из-за того, что обнаружили повреждение файла, вы можете не захотеть выйти с нулевым кодом возврата, что означает успех, поэтому вы должны вызвать QCoreApplication::exit(), потому что вы можете предоставить ненулевой returnCode, который по соглашению указывает на ошибку.

Важно отметить, что "если цикл события не запущен, эта функция (QCoreApplication:: exit()) ничего не делает", поэтому в этом случае вы должны называть exit(EXIT_FAILURE).

Ответ 2

Вы можете позвонить qApp.exit();. Я всегда использую это и никогда не сталкивался с проблемой.

Если приложение является приложением командной строки, вы действительно можете вернуть код выхода. Это полностью зависит от вас, что такое код.

Ответ 3

если вам нужно закрыть приложение из main(), вы можете использовать этот код

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

Программа будет завершена, если OpenSSL не установлен.

Ответ 4

Если вы используете Qt Jambi, это должно работать:

QApplication.closeAllWindows();