Wenn du zwingend Qt-Funktionen benutzen willst, solltest du nach der Abfrage ein
QTimer::singleShot(60000, &app, SLOT(quit()));
aufrufen (Qt-Doku). Statt der 60000 (60s) kannst du etwas im Bereich 10-100 nehmen - je nachdem, wie lange main() halt noch bis zum Starten der Eventloop braucht.
Meiner Meinung nach nicht 100% elegant, funktioniert.
Mit app.exec() geht das Programm in eine Schleife zur Eventbearbeitung. Für Konsolenprogramme ohne Interaktion ist das IMHO nicht sehr sinnvoll, schon eher für Dialogprogramme oder Serverprozesse welche auf Input warten und dann diesen verarbeiten, also auf SIGNAL/SLOT mechanismen aufbauen.
Im Übrigen wird mit QCoreApplication::exit(code) das Programm (im Gegensatz zum "normalen" exit) NICHT beendet, d.h. es wird lediglich ein Returncode für app.exec() gesetzt und die Eventschleife beendet, jedoch wird der Programmablauf mit dem nächsten Statement fortgesetzt (Siehe Doku).