实现QProcess的最佳方法是什么,在"real time"中读取stdout和stderr?



这个问题经常被问到。许多人建议为此使用readyReadStandardOutput实现QProcess的最佳方式是什么,它可以"实时"读取stdout和stderr?我想在DisplayEdit中添加消息。我必须更改代码中的哪些内容(您可以在下面看到)?是否可以使用QThread在DisplayEdit中进行编写?我已经有了以下代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QProcess>
#include <QDebug>
#include <QCloseEvent>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    process = new QProcess(this);
    connect(process, SIGNAL(readyReadStandardOutput()),SLOT(slotDataOnStdout()));
    connect(process, SIGNAL(readyReadStandardError()), SLOT(slotProcessError()));
    connect(process, SIGNAL(error(QProcess::ProcessError)),SLOT(slotProcessError()));
    connect(process, SIGNAL(started()),SLOT(slotProcessStart()));
    connect(process, SIGNAL(finished(int)),SLOT(slotProcessFinish(int)));
}
MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::on_EnterButton_clicked()
{
    QStringList args = ui->ArgsEdit->text().split(" ");
    QString cmd = ui->CommandEdit->text();
    process->start(cmd, args);
}
void MainWindow::slotDataOnStdout()
{
    qDebug() << "slotDataOnStdout";
    ui->DisplayEdit->append(process->readAllStandardOutput() + 'n');
}
void MainWindow::slotStderr()
{
    qDebug() << "std error";
}
void MainWindow::slotProcessError()
{
    qDebug() << "error";
}
void MainWindow::slotProcessStart()
{
    qDebug() << "start";
}
void MainWindow::slotProcessFinish(int exitCode)
{
    qDebug() << "finish: " << exitCode;
    QString str = process->readAllStandardOutput();
    qDebug() << str;
}

我想执行倒计时定时器的二进制文件。我的计时器代码(我从时钟参考中获取):

#include <stdio.h>
#include <time.h>
void wait ( int seconds )
{
  clock_t endwait;
  endwait = clock () + seconds * CLOCKS_PER_SEC ;
  while (clock() < endwait) {}
}
int main ()
{
  int n;
  printf ("Starting countdown...n");
  for (n=10; n>0; n--)
  {
    printf ("%dn",n);
    wait (1);
  }
  printf ("FIRE!!!n");
  return 0;
}

看起来基本正确。您确实忘记了清理流程,或者忘记了思考流程尚未完成时该怎么办。

对于计时器,请使用QTimer::timeout信号。

相关内容

最新更新