Я пытаюсь перенаправить вывод 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, где печатаются все выходные сообщения моего приложения.