2012-04-11 99 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