From 3883547da4d2b9b34d09e4830627c4f94ecb434b Mon Sep 17 00:00:00 2001 From: nirvn Date: Mon, 5 Feb 2018 12:39:00 +0700 Subject: [PATCH] Do not refresh stats when opening the stat summary field combo box Without this change, stats are calculated when users simply open the combo box to select a new field. With large datasets, it freezes QGIS for a long time, and the combo box end up never opening. --- src/app/qgsstatisticalsummarydockwidget.cpp | 11 ++++++++++- src/app/qgsstatisticalsummarydockwidget.h | 3 +++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/app/qgsstatisticalsummarydockwidget.cpp b/src/app/qgsstatisticalsummarydockwidget.cpp index 14a23b5ae34..b017e13d7dd 100644 --- a/src/app/qgsstatisticalsummarydockwidget.cpp +++ b/src/app/qgsstatisticalsummarydockwidget.cpp @@ -88,7 +88,7 @@ QgsStatisticalSummaryDockWidget::QgsStatisticalSummaryDockWidget( QWidget *paren mFieldExpressionWidget->setLayer( mLayerComboBox->layer( 0 ) ); connect( mLayerComboBox, &QgsMapLayerComboBox::layerChanged, this, &QgsStatisticalSummaryDockWidget::layerChanged ); - connect( mFieldExpressionWidget, static_cast( &QgsFieldExpressionWidget::fieldChanged ), this, &QgsStatisticalSummaryDockWidget::refreshStatistics ); + connect( mFieldExpressionWidget, static_cast( &QgsFieldExpressionWidget::fieldChanged ), this, &QgsStatisticalSummaryDockWidget::fieldChanged ); connect( mSelectedOnlyCheckBox, &QAbstractButton::toggled, this, &QgsStatisticalSummaryDockWidget::refreshStatistics ); connect( mButtonRefresh, &QAbstractButton::clicked, this, &QgsStatisticalSummaryDockWidget::refreshStatistics ); connect( QgsProject::instance(), static_cast( &QgsProject::layersWillBeRemoved ), this, &QgsStatisticalSummaryDockWidget::layersRemoved ); @@ -101,6 +101,15 @@ QgsStatisticalSummaryDockWidget::QgsStatisticalSummaryDockWidget( QWidget *paren refreshStatisticsMenu(); } +void QgsStatisticalSummaryDockWidget::fieldChanged() +{ + if ( mFieldExpressionWidget->expression() != mExpression ) + { + mExpression = mFieldExpressionWidget->expression(); + refreshStatistics(); + } +} + void QgsStatisticalSummaryDockWidget::refreshStatistics() { if ( !mLayer || ( mFieldExpressionWidget->isExpression() && !mFieldExpressionWidget->isValidExpression() ) ) diff --git a/src/app/qgsstatisticalsummarydockwidget.h b/src/app/qgsstatisticalsummarydockwidget.h index cf7df6609bc..e953e177cec 100644 --- a/src/app/qgsstatisticalsummarydockwidget.h +++ b/src/app/qgsstatisticalsummarydockwidget.h @@ -58,6 +58,7 @@ class APP_EXPORT QgsStatisticalSummaryDockWidget : public QgsDockWidget, private private slots: void layerChanged( QgsMapLayer *layer ); + void fieldChanged(); void statActionTriggered( bool checked ); void layersRemoved( const QStringList &layers ); void layerSelectionChanged(); @@ -92,6 +93,8 @@ class APP_EXPORT QgsStatisticalSummaryDockWidget : public QgsDockWidget, private QMenu *mStatisticsMenu = nullptr; DataType mFieldType; DataType mPreviousFieldType; + + QString mExpression; }; #endif // QGSSTATISTICALSUMMARYDOCKWIDGET_H