将QProcess输出发送到textedit

时间:2017-12-01 13:07:45

标签: c++ qt user-interface qprocess

目前我通过QProcess启动另一个程序并将readreadyReadStandardOutput连接到一个插槽:

QProcess *start = new QProcess(this);
start->start(program,arguments);
connect(start, SIGNAL(readyReadStandardOutput()), log, SLOT(readyReadStandardOutput()));
connect(start, SIGNAL(readyReadStandardError()), log, SLOT(readyReadStandardError()));

log的类型为myTextBrowser

class myTextBrowser : public QTextBrowser{
...
public slots:
void readyReadStandardOutput();
void readyReadStandardError();
...
}

插槽看起来像这样:

void myTextBrowser::readyReadStandardOutput(){
    QProcess *p = qobject_cast<QProcess*>(sender());
    QString txt (p->readAllStandardOutput());
    ...
    setText(txt);
}

问题是,存在很大的延迟。我的GUI中的文本每隔几秒钟就会更新一次,有时甚至接近一分钟。

是否有更优雅的解决方案将输出转发到另一个小部件?

请注意,被调用的程序可以运行一个小时,但显示的输出不是很长......但是waitForFinished是不可能的,因为我希望在进程运行时GUI仍然可用。

1 个答案:

答案 0 :(得分:0)

我的插槽工作正常,看起来像这样:

void EcuAppControl::readStandardOutput()
{
  QProcess *p = qobject_cast<QProcess*>(sender());
  p->setReadChannel(QProcess::StandardError);
  while(p->canReadLine())
  {
    qDebug() << p->readLine();
  }
}

确保使用Qt::DirectConnection。但这应该是默认的。