Qt处理进程终止

时间:2015-10-14 14:07:34

标签: c++ qt

我有一个启动另一个应用程序的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;
}

但是当我杀死子进程时没有出现任何消​​息。我做错了什么?

1 个答案:

答案 0 :(得分:1)

我尝试了从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然而它确实继续运行,我能够在外部杀死它。