Qt扫盲-QProcess理论总结_qprocess结束进程_太阳风暴的博客-CSDN博客
QProcess 允许我们将进程视为 序列I/O 设备。因为 QProcess 本身继承至 QIODevice 类,我们可以对进程进行读写,就像使用QTcpSocket 访问网络连接一样。然后,你可以调用write()来写入进程的标准输入,并调用read()、readLine() 和 getChar() 来读取标准输出。因为它继承了QIODevice,所以QProcess 也可以用作 QXmlReader 的输入源,或者用来生成要使用QNetworkAccessManager上传的数据。
当外部进程退出时,QProcess 重新进入NotRunning 状态(初始状态),并发出 finished() 信号。
finished()信号提供了进程的退出代码和退出状态作为参数,你还可以调用exitCode()来获得最后一个已经完成的进程的退出代码,调用exitStatus()来获得它的退出状态。
如果在任何时间点发生错误,QProcess将发出erroroccurs()信号。你还可以调用error()来查找上次发生的错误类型,调用state()来查找当前进程的状态。
————————————————
版权声明:本文为CSDN博主「太阳风暴」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43680827/article/details/129440680
QProcess中的调用外部exe结束之后的finished信号及常用信号_qprocess 结束_Littlehero_121的博客-CSDN博客
1、可以参考相关的链接:https://doc.qt.io/Qt-5/qprocess.html#finished
2、注意使用的时候启动以下4个信号,使用的是start(),否则启动就有问题,
这边注意一下start()和startDetached()的区别:https://blog.csdn.net/kucoffee12/article/details/75200101
start相关的以下4个信号:(以下是绑定)
QProcess *process = new QProcess;
connect(process, SIGNAL(readyReadStandardOutput()), this, SLOT(redFromStdOut()));
connect(process, SIGNAL(readyReadStandardError()), this, SLOT(redFromStdErr()));
connect(process, SIGNAL(error(QProcess::ProcessError)), this, SLOT(processError(QProcess::ProcessError)));
connect(process, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(processFinished(int,QProcess::ExitStatus)));
程序结束有正常和异常,结构体如下:
enum ExitStatus {
NormalExit,
CrashExit
};
void MainWindow::processFinished(int exitCode, QProcess::ExitStatus exitStatus)
{
if(exitStatus == QProcess::NormalExit)
{
//程序正常结束
}
else
{
//程序异常结束
}
}
进入正常结束,可以判断调用的exe程序已经完成了,通过这种方式来知道调用的执行程序什么时候终结;