【发布时间】:2011-06-08 13:08:36
【问题描述】:
我发现了类似的问题,但从未找到确切的答案。我有启动 QProcess 并将输出写入 QTextEdit 框的 Qt 程序,到目前为止一切顺利。但它只有在程序结束时才会这样做。如果可能的话,我希望程序标准输出能够实时打印。在一个理想的世界中,当有一行准备好读取时,QProcess 会发出某种信号,如果 QProcess 不可能,那它可能吗?此外,理想情况下,您仍然可以在进程运行时使用程序的其余部分。
这是我到目前为止的一些代码,非常简单,它只是将 QProcess 标准输出的第一行发送到 QTextEdit
...
extProcess::extProcess(QObject *parent) :
QObject(parent)
extProcess::extProcess(QObject *parent) :
QObject(parent)
{
proc = new QProcess(this); //initialize proc
arguments << "-v";
connect(proc, SIGNAL(readyRead()), this, SLOT(logReady()));
}
void extProcess::startProcess()
{
emit clearLog();
emit outLog("--Process started--");
proc->start("/Users/jonathan/Desktop/testgg");
}
void extProcess::logReady()
{
emit outLog(proc->readLine());
}
...
这是我尝试过的其他版本,这将显示整个 QProcess 输出,但仍然 仅在程序结束时显示。
...
extProcess::extProcess(QObject *parent) :
QObject(parent)
{
proc = new QProcess(this); //initialize proc
proc->setProcessChannelMode(QProcess::SeparateChannels);
arguments << "-v";
connect(proc, SIGNAL(readyReadStandardOutput()), this, SLOT(logReady()));
}
void extProcess::logReady()
{
while(proc->bytesAvailable()){
emit outLog(proc->readLine());
}
}
void extProcess::startProcess()
{
emit clearLog();
emit outLog("--Process started--");
proc->start("/Users/jonathan/Desktop/testgg");
}
void extProcess::killProcess()
{
proc->terminate();
emit clearLog();
emit outLog("--Process Terminated--");
}
....
谢谢
【问题讨论】: