Вопрос по – Отображение в реальном времени вывода QProcess в textBrowser

3

Я новичок в разработке qt и хочу передать вывод QProcess в textBrowser в режиме реального времени. Я начал с выполнения простой команды echo, но вывод программы не отображается. Что я делаю неправильно????

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

Постскриптум Я на машине Linux.

РЕДАКТИРОВАТЬ: Я до сих пор не могу получить вывод в textBrowser.

Я изменил параметры Qprocess и попробовал и waitForStarted (), и waitForReadyRead (), чтобы процесс запускался вовремя и результаты были доступны.

Я добавил waitForFinished (), чтобы процесс не завершался, когда он выходит из области видимости.

<code>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();
</code>

Ваш Ответ

1   ответ
8

waitForReadyRead() перед чтением стандартного вывода, или вам необходимо подключить сигнал QprocessreadyReadStandardOutput() в ваш слот и читать стандартный вывод из слота.

также убедитесь, что ваш 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();
}
добавлен пример кода, надеюсь, это поможет.
Я хотел бы отобразить результаты в textBrowser, но этот код отображает результаты в самом терминале qt. Tanmay J Shetty
Увидетьsites.google.com/site/marcsturmspages/qt/… для проблемы буферизации и ее обхода.
Можете ли вы опубликовать хороший пример кода Tanmay J Shetty
ну, вы можете использовать ui- & gt; textBrowser-> append вместо qDebug ()

Похожие вопросы