From 28a0a3ad066095a9967baa986df2ee05679d40f2 Mon Sep 17 00:00:00 2001 From: Gaute Lindkvist Date: Wed, 4 Dec 2019 09:13:54 +0100 Subject: [PATCH] #5171 Fix legend updates by getting rid of the show/hideEvent crash fix * The crash is instead fixed by getting rid of deleteLater() --- .../Flow/RimFlowCharacteristicsPlot.cpp | 8 ++++++-- .../Flow/RimTofAccumulatedPhaseFractionsPlot.cpp | 8 ++++++-- .../Flow/RimTotalWellAllocationPlot.cpp | 8 ++++++-- .../Flow/RimWellAllocationPlot.cpp | 8 ++++++-- .../GridCrossPlots/RimGridCrossPlot.cpp | 3 ++- .../ProjectDataModel/RimGridPlotWindow.cpp | 3 ++- .../ProjectDataModel/Summary/RimSummaryPlot.cpp | 3 ++- .../UserInterface/RiuGridCrossQwtPlot.cpp | 6 ++++-- .../UserInterface/RiuQwtPlotWidget.cpp | 15 ++++----------- .../UserInterface/RiuSummaryQwtPlot.cpp | 7 ++++++- 10 files changed, 44 insertions(+), 25 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/Flow/RimFlowCharacteristicsPlot.cpp b/ApplicationCode/ProjectDataModel/Flow/RimFlowCharacteristicsPlot.cpp index 5775f31719..73b7eb03f2 100644 --- a/ApplicationCode/ProjectDataModel/Flow/RimFlowCharacteristicsPlot.cpp +++ b/ApplicationCode/ProjectDataModel/Flow/RimFlowCharacteristicsPlot.cpp @@ -118,7 +118,9 @@ RimFlowCharacteristicsPlot::~RimFlowCharacteristicsPlot() if ( m_flowCharPlotWidget ) { - m_flowCharPlotWidget->deleteLater(); + m_flowCharPlotWidget->hide(); + m_flowCharPlotWidget->setParent( nullptr ); + delete m_flowCharPlotWidget; m_flowCharPlotWidget = nullptr; } } @@ -159,7 +161,9 @@ void RimFlowCharacteristicsPlot::deleteViewWidget() { if ( m_flowCharPlotWidget ) { - m_flowCharPlotWidget->deleteLater(); + m_flowCharPlotWidget->hide(); + m_flowCharPlotWidget->setParent( nullptr ); + delete m_flowCharPlotWidget; m_flowCharPlotWidget = nullptr; } } diff --git a/ApplicationCode/ProjectDataModel/Flow/RimTofAccumulatedPhaseFractionsPlot.cpp b/ApplicationCode/ProjectDataModel/Flow/RimTofAccumulatedPhaseFractionsPlot.cpp index 37c266dd76..5315964b01 100644 --- a/ApplicationCode/ProjectDataModel/Flow/RimTofAccumulatedPhaseFractionsPlot.cpp +++ b/ApplicationCode/ProjectDataModel/Flow/RimTofAccumulatedPhaseFractionsPlot.cpp @@ -71,7 +71,9 @@ RimTofAccumulatedPhaseFractionsPlot::~RimTofAccumulatedPhaseFractionsPlot() if ( m_tofAccumulatedPhaseFractionsPlotWidget ) { - m_tofAccumulatedPhaseFractionsPlotWidget->deleteLater(); + m_tofAccumulatedPhaseFractionsPlotWidget->hide(); + m_tofAccumulatedPhaseFractionsPlotWidget->setParent( nullptr ); + delete m_tofAccumulatedPhaseFractionsPlotWidget; m_tofAccumulatedPhaseFractionsPlotWidget = nullptr; } } @@ -83,7 +85,9 @@ void RimTofAccumulatedPhaseFractionsPlot::deleteViewWidget() { if ( m_tofAccumulatedPhaseFractionsPlotWidget ) { - m_tofAccumulatedPhaseFractionsPlotWidget->deleteLater(); + m_tofAccumulatedPhaseFractionsPlotWidget->hide(); + m_tofAccumulatedPhaseFractionsPlotWidget->setParent( nullptr ); + delete m_tofAccumulatedPhaseFractionsPlotWidget; m_tofAccumulatedPhaseFractionsPlotWidget = nullptr; } } diff --git a/ApplicationCode/ProjectDataModel/Flow/RimTotalWellAllocationPlot.cpp b/ApplicationCode/ProjectDataModel/Flow/RimTotalWellAllocationPlot.cpp index 0481a7b256..ab9421e5ee 100644 --- a/ApplicationCode/ProjectDataModel/Flow/RimTotalWellAllocationPlot.cpp +++ b/ApplicationCode/ProjectDataModel/Flow/RimTotalWellAllocationPlot.cpp @@ -59,7 +59,9 @@ RimTotalWellAllocationPlot::~RimTotalWellAllocationPlot() if ( m_wellTotalAllocationPlotWidget ) { - m_wellTotalAllocationPlotWidget->deleteLater(); + m_wellTotalAllocationPlotWidget->hide(); + m_wellTotalAllocationPlotWidget->setParent( nullptr ); + delete m_wellTotalAllocationPlotWidget; m_wellTotalAllocationPlotWidget = nullptr; } } @@ -71,7 +73,9 @@ void RimTotalWellAllocationPlot::deleteViewWidget() { if ( m_wellTotalAllocationPlotWidget ) { - m_wellTotalAllocationPlotWidget->deleteLater(); + m_wellTotalAllocationPlotWidget->hide(); + m_wellTotalAllocationPlotWidget->setParent( nullptr ); + delete m_wellTotalAllocationPlotWidget; m_wellTotalAllocationPlotWidget = nullptr; } } diff --git a/ApplicationCode/ProjectDataModel/Flow/RimWellAllocationPlot.cpp b/ApplicationCode/ProjectDataModel/Flow/RimWellAllocationPlot.cpp index 4382d2890b..ff70346f5c 100644 --- a/ApplicationCode/ProjectDataModel/Flow/RimWellAllocationPlot.cpp +++ b/ApplicationCode/ProjectDataModel/Flow/RimWellAllocationPlot.cpp @@ -145,7 +145,9 @@ RimWellAllocationPlot::~RimWellAllocationPlot() if ( m_wellAllocationPlotWidget ) { - m_wellAllocationPlotWidget->deleteLater(); + m_wellAllocationPlotWidget->hide(); + m_wellAllocationPlotWidget->setParent( nullptr ); + delete m_wellAllocationPlotWidget; m_wellAllocationPlotWidget = nullptr; } } @@ -183,7 +185,9 @@ void RimWellAllocationPlot::deleteViewWidget() { if ( m_wellAllocationPlotWidget ) { - m_wellAllocationPlotWidget->deleteLater(); + m_wellAllocationPlotWidget->hide(); + m_wellAllocationPlotWidget->setParent( nullptr ); + delete m_wellAllocationPlotWidget; m_wellAllocationPlotWidget = nullptr; } } diff --git a/ApplicationCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlot.cpp b/ApplicationCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlot.cpp index c4ff5bc8c3..fa0336dced 100644 --- a/ApplicationCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlot.cpp +++ b/ApplicationCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlot.cpp @@ -1122,7 +1122,8 @@ void RimGridCrossPlot::cleanupBeforeClose() if ( m_plotWidget ) { - m_plotWidget->deleteLater(); + m_plotWidget->setParent( nullptr ); + delete m_plotWidget; m_plotWidget = nullptr; } } diff --git a/ApplicationCode/ProjectDataModel/RimGridPlotWindow.cpp b/ApplicationCode/ProjectDataModel/RimGridPlotWindow.cpp index 35223e6b19..35bd1d77ad 100644 --- a/ApplicationCode/ProjectDataModel/RimGridPlotWindow.cpp +++ b/ApplicationCode/ProjectDataModel/RimGridPlotWindow.cpp @@ -617,7 +617,8 @@ void RimGridPlotWindow::cleanupBeforeClose() if ( m_viewer ) { - m_viewer->deleteLater(); + m_viewer->setParent( nullptr ); + delete m_viewer; m_viewer = nullptr; } } diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.cpp index cc4c271261..c4380b8580 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.cpp @@ -1519,7 +1519,8 @@ void RimSummaryPlot::cleanupBeforeClose() if ( m_plotWidget ) { - m_plotWidget->deleteLater(); + m_plotWidget->setParent( nullptr ); + delete m_plotWidget; m_plotWidget = nullptr; } } diff --git a/ApplicationCode/UserInterface/RiuGridCrossQwtPlot.cpp b/ApplicationCode/UserInterface/RiuGridCrossQwtPlot.cpp index 28caca7e48..ac6f92bfe7 100644 --- a/ApplicationCode/UserInterface/RiuGridCrossQwtPlot.cpp +++ b/ApplicationCode/UserInterface/RiuGridCrossQwtPlot.cpp @@ -160,7 +160,8 @@ void RiuGridCrossQwtPlot::removeDataSetLegend( RimGridCrossPlotDataSet* dataSetT if ( it->second != nullptr ) { it->second->hide(); - it->second->deleteLater(); + it->second->setParent( nullptr ); + delete it->second; } m_legendWidgets.erase( it ); @@ -181,7 +182,8 @@ void RiuGridCrossQwtPlot::removeDanglingDataSetLegends() if ( it->second != nullptr ) { it->second->hide(); - it->second->deleteLater(); + it->second->setParent( nullptr ); + delete it->second; } m_legendWidgets.erase( it++ ); } diff --git a/ApplicationCode/UserInterface/RiuQwtPlotWidget.cpp b/ApplicationCode/UserInterface/RiuQwtPlotWidget.cpp index e1358d1771..6535bdde84 100644 --- a/ApplicationCode/UserInterface/RiuQwtPlotWidget.cpp +++ b/ApplicationCode/UserInterface/RiuQwtPlotWidget.cpp @@ -78,9 +78,10 @@ RiuQwtPlotWidget::RiuQwtPlotWidget( RimPlotInterface* plotTrackDefinition, QWidg //-------------------------------------------------------------------------------------------------- RiuQwtPlotWidget::~RiuQwtPlotWidget() { - // The destructor may be called later when deleting with QWidget::deleteLater() - // If you are recreating the widget, then calling something that detaches QwtCurves - // here may cause them to detach from the new widget rather than the old. + if ( plotDefinition() ) + { + plotDefinition()->detachAllCurves(); + } } //-------------------------------------------------------------------------------------------------- @@ -543,10 +544,6 @@ bool RiuQwtPlotWidget::eventFilter( QObject* watched, QEvent* event ) void RiuQwtPlotWidget::hideEvent( QHideEvent* event ) { resetCurveHighlighting(); - if ( plotDefinition() ) - { - plotDefinition()->detachAllCurves(); - } QwtPlot::hideEvent( event ); } @@ -561,10 +558,6 @@ void RiuQwtPlotWidget::showEvent( QShowEvent* event ) m_canvasStyleSheet = createCanvasStyleSheet(); m_canvasStyleSheet.applyToWidget( canvas() ); - if ( plotDefinition() ) - { - plotDefinition()->reattachAllCurves(); - } QwtPlot::showEvent( event ); } diff --git a/ApplicationCode/UserInterface/RiuSummaryQwtPlot.cpp b/ApplicationCode/UserInterface/RiuSummaryQwtPlot.cpp index 5f6c997750..5969409a84 100644 --- a/ApplicationCode/UserInterface/RiuSummaryQwtPlot.cpp +++ b/ApplicationCode/UserInterface/RiuSummaryQwtPlot.cpp @@ -189,7 +189,12 @@ void RiuSummaryQwtPlot::removeEnsembleCurveSetLegend( RimEnsembleCurveSet* curve auto it = m_ensembleLegendWidgets.find( curveSetToShowLegendFor ); if ( it != m_ensembleLegendWidgets.end() ) { - if ( it->second != nullptr ) it->second->deleteLater(); + if ( it->second != nullptr ) + { + it->second->hide(); + it->second->setParent( nullptr ); + delete it->second; + } m_ensembleLegendWidgets.erase( it ); }