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

標準出力を読み取るには、 stardard output を読み取る前に呼び出すか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 に答える