Я борюсь с этой проблемой, и я не могу найти решение, несмотря на многие исследования в 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);}
Также это не сработало: я мог визуализировать результаты в режиме реального времени, но результаты процессов были смешаны
Задача ещё не решена.
Других решений пока нет …