gpt4 book ai didi

c++ - QApplication : How to shutdown gracefully on Ctrl-C

转载 作者:IT老高 更新时间:2023-10-28 21:33:59 25 4
gpt4 key购买 nike

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

最佳答案

可能有一种方法可以使用 Qt 原生地做到这一点——我在放弃之前浏览了 QKeySequence 文档,但您可以只使用 signal。目前我的机器上没有 Qt/C++ 设置,但我有 Python 绑定(bind)。

import sys, signal
from PyQt4 import QtGui

app = QtGui.QApplication(sys.argv)
signal.signal(signal.SIGINT, signal.SIG_DFL)

sys.exit(app.exec_())

这很有效,当我执行 Ctrl-C 时会关闭应用程序。所以我相信你的应用程序可以修改这段代码,最终会是这样的:

#include <signal.h>

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

... // parse command line options

if (no_gui) {
signal(SIGINT, SIG_DFL);
}

...

return app.exec();
}

不幸的是,我无法编译它,所以它可能需要一些修复,但这应该会给你一个大致的想法。通过使用 SIG_DFL 处理程序,您可以指示您的程序使用与 Ctrl-C 关联的默认操作。

关于c++ - QApplication : How to shutdown gracefully on Ctrl-C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2300401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com