Я нашел похожие вопросы, но никогда не получил точного ответа.У меня есть программа Qt, которая запускает QProcess и записывает вывод в окно QTextEdit, пока все хорошо.Но это происходит только после завершения программы.если возможно, я бы хотел, чтобы стандартный вывод программ печатался в реальном времени.В идеальном мире был бы некоторый сигнал, который QProcess испускает, когда есть готовая строка для чтения, если это невозможно с QProcess, возможно ли это вообще?Кроме того, в идеале вы могли бы по-прежнему использовать оставшуюся часть программы во время выполнения процесса.
Вот часть кода, который у меня есть, очень простой, он просто выдает первую строку стандартного вывода QProcess в QTextEdit
...
extProcess::extProcess(QObject *parent) :
QObject(parent)
extProcess::extProcess(QObject *parent) :
QObject(parent)
{
proc = new QProcess(this); //initialize proc
arguments << "-v";
connect(proc, SIGNAL(readyRead()), this, SLOT(logReady()));
}
void extProcess::startProcess()
{
emit clearLog();
emit outLog("--Process started--");
proc->start("/Users/jonathan/Desktop/testgg");
}
void extProcess::logReady()
{
emit outLog(proc->readLine());
}
...
Это альтернативная версия, которую я пробовал, она будет отображать весь вывод QProcess, но будет отображаться только после завершения программы.
...
extProcess::extProcess(QObject *parent) :
QObject(parent)
{
proc = new QProcess(this); //initialize proc
proc->setProcessChannelMode(QProcess::SeparateChannels);
arguments << "-v";
connect(proc, SIGNAL(readyReadStandardOutput()), this, SLOT(logReady()));
}
void extProcess::logReady()
{
while(proc->bytesAvailable()){
emit outLog(proc->readLine());
}
}
void extProcess::startProcess()
{
emit clearLog();
emit outLog("--Process started--");
proc->start("/Users/jonathan/Desktop/testgg");
}
void extProcess::killProcess()
{
proc->terminate();
emit clearLog();
emit outLog("--Process Terminated--");
}
....
Спасибо