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


129

Як слід вийти з програми Qt, наприклад, під час завантаження файлу даних та виявленого пошкодження файлу, і користувачеві потрібно вийти з цього додатка або відновити файл даних?

Повинен я:

  1. дзвінок exit(EXIT_FAILURE)
  2. дзвінок QApplication::quit()
  3. дзвінок QCoreApplication::quit()

І різниця між (2) і (3)?

Відповіді:


145

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 (): Якщо цикл подій не працює, ця функція нічого не робить.
Sacha Guyer

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.