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


129

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

Нужно ли мне:

  1. вызов exit(EXIT_FAILURE)
  2. вызов QApplication::quit()
  3. вызов QCoreApplication::quit()

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

Ответы:


146

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

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

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


30

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

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


3
Мне нужно было сделать следующее:qApp->exit();
Фредерик


-2

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

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

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


1
Думаю, это не компилируется. app.exit (0) не возвращает int. Используйте if(!QSslSocket::supportsSsl()) {return 0;};. Поскольку app.exec () не был вызван в этой строке, app.exit (0) ничего не делает, см. Документацию QCoreApplication :: exit (): Если цикл событий не запущен, эта функция ничего не делает.
Саша Гайер

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

пример


вопрос не в отключении новых процессов
coder
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.