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

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

Решение:

#include <qcoreapplication>
#include <qdebug>

#include <signal.h>
#include <unistd.h>

void catchUnixSignals(const std::vector& quitSignals,
                      const std::vector& ignoreSignals = std::vector()) {

    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