4

我是 qt 开发的新手,我想将 QProcess 的输出实时传输到 textBrowser。我从执行一个简单的 echo 命令开始,但没有显示程序的输出。我究竟做错了什么????

QProcess p;
p.start("echo hye");
QByteArray byteArray = p.readAllStandardOutput();
    QStringList strLines = QString(byteArray).split("\n");
    QString line= p.readAllStandardOutput();
    if(p.state()==QProcess::NotRunning)
        ui->textBrowser->append("not running");
    foreach (QString line, strLines){
    ui->textBrowser->append(line);}

PS我在一台linux机器上。

编辑:我仍然无法在 textBrowser 中获得输出。

我更改了 Qprocess 参数并尝试了 waitForStarted() 和 waitForReadyRead() ,以便进程及时启动并且结果可用。

我添加了 waitForFinished() 以便进程在超出范围时不会终止。

QProcess p;
    p.start("echo", QStringList() << "hye");
    p.waitForStarted();
    QByteArray byteArray = p.readAllStandardOutput();
    QStringList strLines = QString(byteArray).split("\n");
    QString line= p.readAllStandardOutput();
    if(p.state()==QProcess::NotRunning)
        ui->textBrowser->append("not running");
    ui->textBrowser->append(line);
    p.waitForFinished();
4

1 回答 1

9

要读取标准输出,您需要在读取标准输出waitForReadyRead()之前调用,或者您需要将 Qprocess 的信号连接readyReadStandardOutput()到您的插槽并从插槽读取标准输出。

还要确保您的 QProcess 不在堆栈上。

我尝试以下代码工作正常。

编辑:

MyProcess::MyProcess(QObject *parent) :
    QObject(parent)
{
    QString program = "echo";
    QStringList arguments;
    arguments << "Hello";
    mProcess.start(program,arguments);
    connect(&mProcess,SIGNAL(readyReadStandardOutput()),this,SLOT(readyReadStandardOutput()));
    connect(&mProcess,SIGNAL(readyReadStandardError()),this,SLOT(readyReadStandardError()));
}

void MyProcess::readyReadStandardOutput(){
    qDebug()<< mProcess.readAllStandardOutput();
}

void MyProcess::readyReadStandardError(){
    qDebug() << mProcess.readAllStandardError();
}
于 2012-04-11T04:34:06.877 回答