QApplication:如何在 Ctrl-C 上正常关闭 [英] QApplication: How to shutdown gracefully on Ctrl-C

查看:35
本文介绍了QApplication:如何在 Ctrl-C 上正常关闭的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have a QApplication that, depending on command line parameters, sometimes doesn't actually have a GUI window, but just runs without GUI. In this case, I want to shut it down gracefully if CTRL-C was hit. Basically my code looks like this:

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 似乎被捕获(应用程序没有被杀死),但它也没有退出.我错过了什么?

However, this does not work. CTRL-C seems to be caught (the application doesn't get killed), but it also doesn't exit. What am I missing?

推荐答案

由于没有文档说明,因此不应使用 QApplication::watchUnixSignal.而且,从阅读代码来看,在使用 glib 事件调度程序(Linux 上的默认设置)时,它无法正常工作.

As it isn't documented, QApplication::watchUnixSignal shouldn't be used. And, from reading the code, it will not work properly when using the glib event dispatcher (which is the default on Linux).

但是,通常您可以安全地在 Qt 应用程序中捕获 Unix 信号,您只需要自己编写一些代码即可.文档中甚至还有一个例子 - 从 Unix 信号处理程序调用 Qt 函数.

However, in general you can safely catch Unix signals in Qt applications, you just have to write a bit of the code yourself. There is even an example in the documentation - Calling Qt Functions From Unix Signal Handlers.

这篇关于QApplication:如何在 Ctrl-C 上正常关闭的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆