diff --git a/src/plugins/qmldesigner/designercore/instances/puppetbuildprogressdialog.cpp b/src/plugins/qmldesigner/designercore/instances/puppetbuildprogressdialog.cpp index dfe36cea5cfd49c7961bc48218f4795d85aa14e3..30002333e5f9f21c9ca6814d22dafdfe345cb4a6 100644 --- a/src/plugins/qmldesigner/designercore/instances/puppetbuildprogressdialog.cpp +++ b/src/plugins/qmldesigner/designercore/instances/puppetbuildprogressdialog.cpp @@ -67,6 +67,12 @@ bool PuppetBuildProgressDialog::useFallbackPuppet() const return m_useFallbackPuppet; } +void PuppetBuildProgressDialog::setErrorOutputFile(const QString &filePath) +{ + ui->openErrorOutputFileLabel->setText(QString::fromLatin1("%2").arg( + filePath, ui->openErrorOutputFileLabel->text())); +} + void PuppetBuildProgressDialog::setUseFallbackPuppet() { m_useFallbackPuppet = true; diff --git a/src/plugins/qmldesigner/designercore/instances/puppetbuildprogressdialog.h b/src/plugins/qmldesigner/designercore/instances/puppetbuildprogressdialog.h index ab2622c7fb7277def1a9a9e5465f142f7b5d5468..53432f70ab2bb749f2bdb1cc9497ca3ff3f53fdf 100644 --- a/src/plugins/qmldesigner/designercore/instances/puppetbuildprogressdialog.h +++ b/src/plugins/qmldesigner/designercore/instances/puppetbuildprogressdialog.h @@ -51,6 +51,7 @@ public: void setProgress(int progress); void newBuildOutput(const QByteArray &standardOutput); bool useFallbackPuppet() const; + void setErrorOutputFile(const QString &filePath); private slots: void setUseFallbackPuppet(); diff --git a/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp b/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp index b397d1a2646266a4a375c771bee6e37c26faa537..55b91b0bc1360ca575ae236df196610579cd8652 100644 --- a/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp +++ b/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp @@ -391,21 +391,31 @@ bool PuppetCreator::startBuildProcess(const QString &buildDirectoryPath, if (command.isEmpty()) return false; + const QString errorOutputFilePath(buildDirectoryPath + QLatin1String("/build_error_output.txt")); + if (QFile::exists(errorOutputFilePath)) + QFile(errorOutputFilePath).remove(); + progressDialog->setErrorOutputFile(errorOutputFilePath); + QProcess process; + process.setStandardErrorFile(errorOutputFilePath); process.setProcessChannelMode(QProcess::SeparateChannels); process.setProcessEnvironment(processEnvironment()); process.setWorkingDirectory(buildDirectoryPath); process.start(command, processArguments); process.waitForStarted(); - while (process.waitForReadyRead(-1)) { + while (process.waitForReadyRead(100) || process.state() == QProcess::Running) { if (progressDialog->useFallbackPuppet()) return false; + QApplication::processEvents(QEventLoop::ExcludeSocketNotifiers); + QByteArray newOutput = process.readAllStandardOutput(); - if (progressDialog) - progressDialog->newBuildOutput(newOutput); + if (!newOutput.isEmpty()) { + if (progressDialog) + progressDialog->newBuildOutput(newOutput); - m_compileLog.append(newOutput); + m_compileLog.append(QString::fromLatin1(newOutput)); + } } process.waitForFinished();