Правильный способ выхода из программы 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();