2012-04-11 15 views
3

私はqt開発の初心者です。QProcessの出力をリアルタイムでtextBrowserに転送したいと考えています。私は簡単なエコーコマンドを実行することから始めましたが、プログラムの出力は表示されません。 何が間違っていますか?QProcessのリアルタイム表示をtextBrowserに表示

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マシンです。

EDIT: 私はまだtextBrowserで出力を取得できません。

Qプロセスのパラメータを変更し、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

あなたがstardard出力を読む前waitForReadyRead()を呼び出し、またはあなたのスロットにQprocessの信号readyReadStandardOutput()を接続し、スロットから標準出力を読み取る必要があるかのいずれか必要がある標準出力を読み込みます。

QProcessがスタックしていないことも確認してください。

私は次のコードがうまく動作しようとしました。

EDIT:

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

あなたは、良い例のコード –

+0

追加サンプルコードを投稿することが役立つことを願ってくださいすることができます。 – Kunal

+0

結果をtextBrowserに表示したいのですが、このコードはqtの端末自体に結果を表示します。 –

関連する問題