繁体   English   中英

Qt处理进程终止

[英]Qt handle process termination

我有一个Qt应用程序,可以启动另一个应用程序。 如果子应用程序在外部终止,我想接收信号。

代码是:

CaptureApp::CaptureApp(int& argc, char** argv): QApplication(argc, argv)
{    
    launchDaemon();
}

void CaptureApp::launchDaemon()
{
    QString command = "daemon";
    QStringList arguments;
    arguments << "somearg";
    process = new QProcess(this);
    process->start(command, arguments);
    connect(process,SIGNAL(stateChanged(QProcess::ProcessState)),this,SLOT(daemonDied(QProcess::ProcessState)));
    connect(process,SIGNAL(finished(int)),this,SLOT(daemonDied(int)));
}
void CaptureApp::daemonDied(QProcess::ProcessState state)
{
    std::cout << "DAEMON DIED" << std::endl;
}

void CaptureApp::daemonDied(int code)
{
    std::cout << "DAEMON DIED" << std::endl;
}

但是当我杀死子进程时,没有消息出现。 我究竟做错了什么?

我尝试了从QApplication继承的示例,但是首先它给了我这个错误:

QObject::connect: No such slot QApplication::daemonDied(QProcess::ProcessState)
QObject::connect: No such slot QApplication::daemonDied(int)

然后,我在类定义中添加了Q_OBJECT ,它连接了信号/插槽,但是当我终止该进程时,出现了以下错误:

ICE default IO error handler doing an exit(), pid = 27773, errno = 4

但是,当我将类更改为继承自QObject而不是QApplication它确实起作用了。 因此,主要有:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    CaptureApp captureApp(argc,argv);

    return a.exec();
}

正如jbm所评论的那样,某些进程保持连接,而另一些则没有。 我尝试了第一个gedit ,开始后它立即收到一个信号,指示进程已完成。 但是使用vim确实可以继续运行,而且我可以在外部将其杀死。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM