为什么QProcess信号readyReadStandardOutput()发出两次?

use*_*809 3 qt signals qprocess

我使用QProcess并将它的readyReadStandardOutput连接到插槽.但是在启动插槽后执行两次.请告诉我,为什么?

{
    myProcess = new QProcess(parent);
    myProcess->start("mayabatch.exe -file "+scene);
    connect(myProcess, SIGNAL(readyReadStandardOutput()), this, SLOT(readOutput()));
}

void MainWindow::readOutput()
{
    qDebug()<<"Read";
    QByteArray outData = myProcess->readAllStandardOutput();
    qDebug()<<QString(outData);
}
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

Read 
"File read in 0 seconds.
" 
Read 
"cacheFi" 
Read 
"le -attachFile -fileName "nClothShape1" -directory ...
Run Code Online (Sandbox Code Playgroud)

最后一个字符串坏了.单词之间出现"Read".

UmN*_*obe 8

从文档中 QProcess::readyReadStandardOutput()

当进程通过其标准输出通道(stdout)提供新数据时,将发出此信号.无论当前读取通道如何,都会发出它.

由于基础进程以单独和随机方式刷新输出的简单原因,因此插槽执行不止一次.你不应该关心这个,因为它取决于你无法控制的事情.

如果你想保存你应该做的整个输出

void MainWindow::readOutput(){
   bigbuffer.append(myProcess->readAllStandardOutput();)
}
Run Code Online (Sandbox Code Playgroud)

如果你想逐行阅读,那么

void MainWindow::readOutput(){
   while(myProcess.canReadLine()){
       qDebug() << myProcess.readLine();
  }
}
Run Code Online (Sandbox Code Playgroud)

第二个调用会将数据保留在进程缓冲区中,这样您就不会有"损坏"的读取cacheFi.