Попробуйте:
connect(&process, SIGNAL(readyReadStandardOutput()), this, SLOT(PrintStandardOutput()));
connect(&process, SIGNAL(started()), this, SLOT(Started()));
process.setProcessChannelMode(QProcess::MergedChannels);
process.start(processToStart, arguments)
void Widget::PrintStandardOutput()
{
// Get the output
QString output;
if (process.waitForStarted(-1)) {
while(process.waitForReadyRead(-1)) {
output += process.readAll();
ui->textEdit_Output->append(output);
}
}
process.waitForFinished();
}
void Widget::Started()
{
ui->stateLabel->setText("Process started...");
}
setProcessChannelMode (QProcess :: MergedChannels) объединит выходные каналы. Различные программы пишут на разные выходы. Некоторые используют вывод ошибок для своей обычной регистрации, некоторые используют «стандартный» вывод, некоторые оба. Лучше объединить их.
readAll () читает все доступное до сих пор.
Он помещается в al oop с waitForReadyRead (-1) (-1 означает нет тайм-аута), который будет блокировать, пока что-то не будет доступно для чтения Это делается для того, чтобы все действительно читалось. Простой вызов readAll () после завершения процесса оказался крайне ненадежным (возможно, буфер уже пуст).