c++ - Qt 处理进程终止

标签 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;
}

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

最佳答案

我试过你从 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 但是它确实继续运行并且我能够从外部杀死它。

关于c++ - Qt 处理进程终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33127622/

相关文章:

c++ - 计算大阶乘时间复杂度

c++ - 反序列化表示非根表的 flatbuffers 二进制文件

c++ - 打开简历中的 videoCapture 后应用程序无响应

qt - 无法将 [undefined] 分配给 QColor

android - 有没有让 Proguard 与 Cocos2d-x 一起工作的例子?和 twitter4j

C++ 引用与指针最佳实践

c++ - 如何将 boost::asio::write 的缓冲区存储为shared_ptr?

c++ - Qt 和 C++ QtPlugin - 可以处理什么样的插件?

c++ - QTableWidget::itemAt() 返回看似随机的项目

qt - 如何使用XQuery获取标签参数值