Qt. Unix сигналы в Qt приложении

Задача: в Qt приложении отловить сигналы выхода из консольного приложения.

Решение:

#include <QCoreApplication>
#include <QDebug>
 
#include <signal.h>
#include <unistd.h>
 
void catchUnixSignals(const std::vector<int>& quitSignals,
                      const std::vector<int>& ignoreSignals = std::vector<int>()) {
 
    auto handler = [](int sig) ->void {
        printf("\nquit the application (user request signal = %d).\n", sig);
        QCoreApplication::quit();
    };
 
    // all these signals will be ignored.
    for ( int sig : ignoreSignals )
        signal(sig, SIG_IGN);
 
    // each of these signals calls the handler (quits the QCoreApplication).
    for ( int sig : quitSignals )
        signal(sig, handler);
}
 
int main(int argc, char *argv[]) {
    QCoreApplication app(argc, argv);
    catchUnixSignals({SIGINT, SIGTERM}); // Для Windows
    //catchUnixSignals({SIGQUIT, SIGINT, SIGTERM, SIGHUP}); // Для Windows + Linux
 
    // do your initialization and other stuff
    qDebug() << "RUN";
 
    return app.exec();
}

Готово. Запускаем в консоле, жмём Ctrl+C и приложение завершается.

https://gist.github.com/vebmaster/9f94781f67edc465a240a294bf77e8ad
https://gist.github.com/azadkuh/a2ac6869661ebd3f8588