c++ QApplication:如何在Ctrl-C上正常关机

我有一个QApplication,根据命令行参数,有时实际上没有GUI窗口,但只运行没有GUI。在这种情况下,如果CTRL-C被击中,我想优雅地关闭它。基本上我的代码看起来像这样:

int main(int argc, char* argv[])
{
    QApplication app(argc, argv);

    ... // parse command line options

    if (no_gui) {
        QObject::connect(&app, SIGNAL(unixSignal(int)),
                         &app, SLOT(quit()));
        app.watchUnixSignal(SIGINT, true);
        app.watchUnixSignal(SIGTERM, true);
    }

    ... 

    return app.exec();
}

但是,这不行。 CTRL-C似乎被捕获(应用程序没有被杀死),但它也不会退出。我失踪了什么

由于没有记录,QApplication :: watchUnixSignal不应该被使用。而且,从使用glib事件调度程序(这是Linux上的默认值)读取代码时,它将无法正常工作。

但是,一般来说,您可以在Qt应用程序中安全地捕获Unix信号,您只需要自己编写一些代码。在文档Calling Qt Functions From Unix Signal Handlers中甚至有一个例子。

翻译自:https://stackoverflow.com/questions/2300401/qapplication-how-to-shutdown-gracefully-on-ctrl-c

转载注明原文:c++ QApplication:如何在Ctrl-C上正常关机