Qt扫盲-QProcess理论总结

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程序已经完成了,通过这种方式来知道调用的执行程序什么时候终结;

猜你喜欢

转载自blog.csdn.net/thanklife/article/details/131030612
今日推荐