2017-12-01 10 views
0

にQProcess出力を送信しますこのように:最良の方法は、現在、私がスロットに読んreadyReadStandardOutputを接続QProcessを経由して別のプログラムを起動し、テキストエディット

void myTextBrowser::readyReadStandardOutput(){ 
    QProcess *p = qobject_cast<QProcess*>(sender()); 
    QString txt (p->readAllStandardOutput()); 
    ... 
    setText(txt); 
} 

問題は、大きな待ち時間があるということです。私のGUIのテキストは数秒ごとに更新されるだけで、時には1分近くも更新されます。

出力を別のウィジェットに転送するより洗練されたソリューションがありますか?

呼び出されるプログラムは1時間実行される可能性がありますが、表示される出力はあまり長くありません...しかし、waitForFinishedは実行できません。

+0

アプリケーションループ自体がイベントループをブロックし、GUIがイベントをタイムリーに処理できない場合、レイテンシが発生する可能性がありますか? – vahancho

+0

うん...これをどうやって確認できますか? 私はGUIと何もしない場合、それはまた起こります。その間に私はGUIを使用し、他のいくつかの信号が放射されると即座に動作します。 – user7431005

+0

'setText(txt);'でテキストブラウザにテキストを設定した後、 'update()'関数を呼び出すとどうでしょうか? – vahancho

答えて

0

私のスロットは正常に動作し、次のようになります。

void EcuAppControl::readStandardOutput() 
{ 
    QProcess *p = qobject_cast<QProcess*>(sender()); 
    p->setReadChannel(QProcess::StandardError); 
    while(p->canReadLine()) 
    { 
    qDebug() << p->readLine(); 
    } 
} 

あなたがQt::DirectConnectionを使用していることを確認してください。しかし、これはデフォルトにする必要があります。

関連する問題