QT Альтернатива waitForFinished () — как не заморозить графический интерфейс

Я борюсь с этой проблемой, и я не могу найти решение, несмотря на многие исследования в Google. Я пытаюсь запустить последовательный QProcess, и поэтому мне нужно подождать, пока один завершит запуск другого. Однако в то же время мне нужно визуализировать результаты QProcess в реальном времени. В начале я сделал:

       QProcess *p_r = new QProcess(this);if(p_r){
p_r->setEnvironment( QProcess::systemEnvironment() );
p_r->setProcessChannelMode( QProcess::MergedChannels );
p_r->start(python_path_glob, arguments_run);
p_r->waitForStarted();
connect( p_r, SIGNAL(readyReadStandardOutput()), this, SLOT(ReadOut()) );
p_r->waitForFinished(-1);

}void MainWindow::ReadOut( ){
QProcess *p = dynamic_cast<QProcess *>( sender() );
ui->textBrowser->append( QString(p->readAllStandardOutput()) );
}

Однако waitforFinished () замораживает пользовательский интерфейс. Какой вид слота и сигнала я могу использовать для достижения той же цели waitforfinished () без блокировки графического интерфейса?
Я также попробовал это:

       QProcess *p_r = new QProcess(this);if(p_r){
p_r->setEnvironment( QProcess::systemEnvironment() );
p_r->setProcessChannelMode( QProcess::MergedChannels );
p_r->start(python_path_glob, arguments_run);
p_r->waitForStarted();
connect( p_r, SIGNAL(readyReadStandardOutput()), this, SLOT(ReadOut()) );
connect(p_r, SIGNAL(started(int, QProcess::ExitStatus)), this, SLOT(done()));

}

void MainWindow::done(){
QProcess *p = dynamic_cast<QProcess *>( sender() );
p->waitForFinished(-1);}

Также это не сработало: я мог визуализировать результаты в режиме реального времени, но результаты процессов были смешаны

-1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]