From eda3d6e4759a5a80d589311f9fb20509d029246b Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Tue, 5 Dec 2017 20:01:01 +1000 Subject: [PATCH] Fix use of QWidgets from non-gui thread --- .../qgsprocessingalgorithmdialogbase.cpp | 23 +++++++++++-------- .../qgsprocessingalgorithmdialogbase.h | 14 +++++++---- 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/src/gui/processing/qgsprocessingalgorithmdialogbase.cpp b/src/gui/processing/qgsprocessingalgorithmdialogbase.cpp index f94fc6add93..772231708c7 100644 --- a/src/gui/processing/qgsprocessingalgorithmdialogbase.cpp +++ b/src/gui/processing/qgsprocessingalgorithmdialogbase.cpp @@ -24,40 +24,39 @@ ///@cond NOT_STABLE -QgsProcessingAlgorithmDialogFeedback::QgsProcessingAlgorithmDialogFeedback( QgsProcessingAlgorithmDialogBase *dialog ) +QgsProcessingAlgorithmDialogFeedback::QgsProcessingAlgorithmDialogFeedback() : QgsProcessingFeedback() - , mDialog( dialog ) { } void QgsProcessingAlgorithmDialogFeedback::setProgressText( const QString &text ) { - mDialog->setProgressText( text ); + emit progressTextChanged( text ); } void QgsProcessingAlgorithmDialogFeedback::reportError( const QString &error ) { - mDialog->reportError( error ); + emit errorReported( error ); } void QgsProcessingAlgorithmDialogFeedback::pushInfo( const QString &info ) { - mDialog->pushInfo( info ); + emit infoPushed( info ); } void QgsProcessingAlgorithmDialogFeedback::pushCommandInfo( const QString &info ) { - mDialog->pushCommandInfo( info ); + emit commandInfoPushed( info ); } void QgsProcessingAlgorithmDialogFeedback::pushDebugInfo( const QString &info ) { - mDialog->pushDebugInfo( info ); + emit debugInfoPushed( info ); } void QgsProcessingAlgorithmDialogFeedback::pushConsoleInfo( const QString &info ) { - mDialog->pushConsoleInfo( info ); + emit consoleInfoPushed( info ); } // @@ -158,8 +157,14 @@ QVariantMap QgsProcessingAlgorithmDialogBase::getParameterValues() const QgsProcessingFeedback *QgsProcessingAlgorithmDialogBase::createFeedback() { - auto feedback = qgis::make_unique< QgsProcessingAlgorithmDialogFeedback >( this ); + auto feedback = qgis::make_unique< QgsProcessingAlgorithmDialogFeedback >(); connect( feedback.get(), &QgsProcessingFeedback::progressChanged, this, &QgsProcessingAlgorithmDialogBase::setPercentage ); + connect( feedback.get(), &QgsProcessingAlgorithmDialogFeedback::commandInfoPushed, this, &QgsProcessingAlgorithmDialogBase::pushCommandInfo ); + connect( feedback.get(), &QgsProcessingAlgorithmDialogFeedback::consoleInfoPushed, this, &QgsProcessingAlgorithmDialogBase::pushConsoleInfo ); + connect( feedback.get(), &QgsProcessingAlgorithmDialogFeedback::debugInfoPushed, this, &QgsProcessingAlgorithmDialogBase::pushDebugInfo ); + connect( feedback.get(), &QgsProcessingAlgorithmDialogFeedback::errorReported, this, &QgsProcessingAlgorithmDialogBase::reportError ); + connect( feedback.get(), &QgsProcessingAlgorithmDialogFeedback::infoPushed, this, &QgsProcessingAlgorithmDialogBase::pushInfo ); + connect( feedback.get(), &QgsProcessingAlgorithmDialogFeedback::progressTextChanged, this, &QgsProcessingAlgorithmDialogBase::setProgressText ); connect( buttonCancel, &QPushButton::clicked, feedback.get(), &QgsProcessingFeedback::cancel ); return feedback.release(); } diff --git a/src/gui/processing/qgsprocessingalgorithmdialogbase.h b/src/gui/processing/qgsprocessingalgorithmdialogbase.h index 0fc34f57762..a657e92cff1 100644 --- a/src/gui/processing/qgsprocessingalgorithmdialogbase.h +++ b/src/gui/processing/qgsprocessingalgorithmdialogbase.h @@ -46,7 +46,16 @@ class QgsProcessingAlgorithmDialogFeedback : public QgsProcessingFeedback /** * Constructor for QgsProcessingAlgorithmDialogFeedback. */ - QgsProcessingAlgorithmDialogFeedback( QgsProcessingAlgorithmDialogBase *dialog ); + QgsProcessingAlgorithmDialogFeedback(); + + signals: + + void progressTextChanged( const QString &text ); + void errorReported( const QString &text ); + void infoPushed( const QString &text ); + void commandInfoPushed( const QString &text ); + void debugInfoPushed( const QString &text ); + void consoleInfoPushed( const QString &text ); public slots: @@ -57,9 +66,6 @@ class QgsProcessingAlgorithmDialogFeedback : public QgsProcessingFeedback void pushDebugInfo( const QString &info ) override; void pushConsoleInfo( const QString &info ) override; - private: - - QgsProcessingAlgorithmDialogBase *mDialog = nullptr; }; #endif