QProcess 不发出完成信号

Posted

技术标签:

【中文标题】QProcess 不发出完成信号【英文标题】:QProcess doesn't emit finish signal 【发布时间】:2021-06-28 13:20:05 【问题描述】:
QProcess* p = new QProcess;
p->setProgram("ping");
p->setArguments(QStringList()<<"127.0.0.1");
connect(p, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
    [=](int exitCode, QProcess::ExitStatus exitStatus)
    qDebug()<<"finished";
);
connect(p, &QProcess::stateChanged,
    [=](QProcess::ProcessState state)
    qDebug()<<"stateChanged"<<state;
);
qDebug()<<p->startDetached();
qDebug()<<"startDetached";

作为上面的演示,我希望在 ping 完成后输出finished。 但它没有,甚至stateChanged 也没有发出。

(顺便说一句,我想我有计划 B 使用 qtconcurrent 来实现)

【问题讨论】:

【参考方案1】:

https://doc.qt.io/qt-5/qprocess.html

QString hostName = "127.0.0.1";

proc = new QProcess();
connect(p, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
    [=](int exitCode, QProcess::ExitStatus exitStatus)
    qDebug()<<"finished";
);
connect(p, &QProcess::stateChanged,
    [=](QProcess::ProcessState state)
    qDebug()<<"stateChanged"<<state;
);
proc->start("ping", QStringList() << QString(hostName));

【讨论】:

以上是关于QProcess 不发出完成信号的主要内容,如果未能解决你的问题,请参考以下文章

QProcess readyRead before started

对象超类的连接信号

在线程内启动 QProcess

使用 lambda 函数了解 QProcess 信号的行为

QProcess正常退出

如何在 Qt 中将插槽连接到信号 QProcess::started()?