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

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

Я:

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

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

5 ответов


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

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

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


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

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


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

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

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


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

пример


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

QApplication.closeAllWindows();