Como obter STDOUT de um QProcess?

Eu pensei em obter a saída de um QProcess usando o seguinte código:

// Start the process process.start(tr("php-cgi www/test.php"),QIODevice::ReadWrite); // Wait for it to start if(!process.waitForStarted()) return 0; // Continue reading the data until EOF reached QByteArray data; while(process.waitForReadyRead()) data.append(process.readAll()); // Output the data qDebug(data.data()); qDebug("Done!"); 

O que estou esperando é ver a saída do programa impressa no console de debugging, mas tudo que vejo é:

Feito!

Eu sei disso:

  • O programa é iniciado bem, porque a mensagem no final é impressa.
  • O programa imprime a saída porque executar exatamente o mesmo comando no terminal produz uma longa seqüência de texto conforme o esperado.

O que estou fazendo de errado aqui?

Antes de iniciar sua chamada de processo:

 process.setProcessChannelMode(QProcess::MergedChannels); 

Isso fará com que a impressão de tudo (mesmo saída STDERR) para saída STDOUT.

Aqui está um esclarecimento:

De acordo com http://doc.qt.io/qt-5/qprocess.html#ProcessChannelMode-enum ,

  • QProcess::MergedChannels : QProcess mescla a saída do processo em execução no canal de saída padrão (stdout). O canal de erro padrão (stderr) não receberá nenhum dado. […]

mas

  • QProcess::ForwardedChannels : QProcess encaminha a saída do processo em execução para o processo principal. Qualquer coisa que o processo filho grava em sua saída padrão e erro padrão será gravada na saída padrão e no erro padrão do processo principal.