2012-04-11 181 views
3

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

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);} 

P.S.我在一台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(); 

回答

8

读取标准输出,你需要阅读的输出参考标准之前,或者调用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(); 
} 
+0

能否请您发表一个很好的例子代码 – 2012-04-11 06:24:19

+0

添加示例代码,希望这将有助于。 – Kunal 2012-04-11 06:42:47

+0

我想在textBrowser中显示结果,但是此代码在qt的终端本身显示结果。 – 2012-04-11 23:54:03