Перенаправление живого вывода QProcess

Я пытаюсь перенаправить вывод QProcess в свою консоль. Вот код, который я использую:

QProcess *process = new QProcess(this);
connect (process, SIGNAL(readyReadStandardOutput()), this, SLOT(processOutput()));
connect (process, SIGNAL(readyReadStandardError()), this, SLOT(processOutput()));
process->start(program);

void MainWindow::processOutput()
{
    qDebug() << process->readAllStandardOutput();
}

Однако приведенное выше не перенаправляет поток вывода в мою консоль. Кажется, что функция processOutput() вызывается каждый раз, когда программа пытается что-то напечатать, но кажется, что весь вывод буферизируется QProcess и печатается на моей консоли только после завершения программы, запущенной QProcess. Любая помощь будет принята с благодарностью. Спасибо!!

У меня есть класс MessageHandler, который перенаправляет все сообщения qDebug на консоль TabOutput в моем приложении с графическим интерфейсом.

MessageHandler::handleMessages(QtMsgType type, const QMessageLogContext &cntxt, const QString &msg)
{
    switch(type)
    {
        case QtDebugMsg:
        if(!m_appOutput)
        {
            fprintf(stderr, "Debug ::  %s\n", qPrintable(msg));
        }
        else
        {
            m_appOutput->append(msg);
        }
        break;
    }
}

В моем main.cpp я зарегистрировал свой класс обработчика сообщений следующим образом:

qInstallMessageHandler(MessageHandler::handleMessages);

m_appOutput - это QTextEdit, который присутствует в MainWindow, где печатаются все выходные сообщения моего приложения.


person sundar    schedule 23.02.2015    source источник
comment
Вы уверены, что проблема в QProcess, а не в том, что qDebug нуждается в сбросе? Вы можете проверить с помощью потоковой передачи и 'endl' в qDebug() после прочтения стандартного вывода.   -  person TheDarkKnight    schedule 23.02.2015
comment
Спасибо за ответ. Никакой разницы после перехода на qDebug() ‹‹ process-›readAllStandardOutput() ‹‹ std::endl;.   -  person sundar    schedule 23.02.2015
comment
@TheDarkKnight На самом деле я перенаправляю все сообщения qDebug в QTextEdit. Если я печатаю сообщения напрямую, то я вижу это вживую. Поэтому я предполагаю, что проблема связана с тем, что QTextEdit не очищается должным образом. Любая помощь??   -  person sundar    schedule 23.02.2015
comment
Пожалуйста, покажите код того, что вы на самом деле делаете.   -  person TheDarkKnight    schedule 23.02.2015
comment
@TheDarkKnight Я добавил несколько правок. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.   -  person sundar    schedule 23.02.2015
comment
Возможно, это актуально: stackoverflow.com/questions/14643293/ Примечание. В Windows qDebug() использует канал отладки, а не stderr   -  person TheDarkKnight    schedule 23.02.2015
comment
Это также может помочь: qt-coding.com/2013/08/06/   -  person TheDarkKnight    schedule 23.02.2015