这个问题困扰着我,因为它应该可以工作,但遗憾的是它没有。我试图实现的是读取某个进程的标准输出并让另一个进程处理它,即打印出来。
产生输出的过程如下所示:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
int main() {
for (int i = 0; i < 100; i++) {
printf("yes %d\n",i);
fflush(stdout);
sleep(1);
}
return 0;
}
该过程在另一个应用程序中启动,如下所示:
#include <QProcess>
...
QProcess * process = new QProcess;
SomeClass * someClass = new SomeClass(process);
connect(process,SIGNAL(readyRead()),someClass,SLOT(onReadyRead()));
process->start("../Test/Test",QStringList());
if (!process->waitForStarted(4000)) {
qDebug() << "Process did not start.";
}
...
void SomeClass::onReadyRead() {
qDebug() << "Reading:" << process->readAllStdOutput();
}
我的预期输出是:
Reading: yes 0
Reading: yes 1
...
Reading: yes 99
但是我根本没有输出。当我使用 QCoreApplication 时,我得到所有输出,但不是通过信号/插槽,而是直接在控制台中。
我不明白,因为它适用于另一个使用 Qt 4.8 的应用程序。
我的问题是,是否有人遇到同样的问题,或者有人知道我如何获得预期的行为?