#8453 Fix crash when changing plot type (QtCharts <-> Qwt).

This commit is contained in:
Kristian Bendiksen 2022-01-17 15:22:27 +01:00
parent 258fbddc10
commit f996b5383a
5 changed files with 33 additions and 5 deletions

View File

@ -1011,11 +1011,16 @@ void RimPlotCurve::attach( RiuPlotWidget* plotWidget )
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimPlotCurve::detach() void RimPlotCurve::detach( bool deletePlotCurve )
{ {
if ( m_plotCurve ) if ( m_plotCurve )
{ {
m_plotCurve->detach(); m_plotCurve->detach();
if ( deletePlotCurve )
{
delete m_plotCurve;
m_plotCurve = nullptr;
}
} }
replotParentPlot(); replotParentPlot();

View File

@ -122,7 +122,7 @@ public:
void setParentPlotAndReplot( RiuPlotWidget* ); void setParentPlotAndReplot( RiuPlotWidget* );
void attach( RiuPlotWidget* ); void attach( RiuPlotWidget* );
void detach(); void detach( bool deletePlotCurve = false );
void reattach(); void reattach();
bool isSameCurve( const RiuPlotCurve* plotCurve ) const; bool isSameCurve( const RiuPlotCurve* plotCurve ) const;

View File

@ -310,11 +310,11 @@ void RimEnsembleCurveSet::setParentPlotNoReplot( RiuPlotWidget* plot )
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimEnsembleCurveSet::detachPlotCurves() void RimEnsembleCurveSet::detachPlotCurves( bool deletePlotCurve )
{ {
for ( RimSummaryCurve* curve : m_curves ) for ( RimSummaryCurve* curve : m_curves )
{ {
curve->detach(); curve->detach( deletePlotCurve );
} }
if ( m_plotCurveForLegendText ) if ( m_plotCurveForLegendText )

View File

@ -95,7 +95,7 @@ public:
void loadDataAndUpdate( bool updateParentPlot ); void loadDataAndUpdate( bool updateParentPlot );
void setParentPlotNoReplot( RiuPlotWidget* plot ); void setParentPlotNoReplot( RiuPlotWidget* plot );
void detachPlotCurves(); void detachPlotCurves( bool deletePlotCurve = false );
void reattachPlotCurves(); void reattachPlotCurves();
void addCurve( RimSummaryCurve* curve ); void addCurve( RimSummaryCurve* curve );

View File

@ -1525,6 +1525,29 @@ void RimSummaryPlot::fieldChangedByUi( const caf::PdmFieldHandle* changedField,
} }
} }
#ifdef USE_QTCHARTS
if ( changedField == &m_useQtChartsPlot )
{
// Hide window
setShowWindow( false );
// Detach and destroy plot curves
for ( auto c : summaryCurves() )
{
c->detach( true );
}
for ( auto& curveSet : this->ensembleCurveSetCollection()->curveSets() )
{
curveSet->detachPlotCurves( true );
}
// Destroy viewer
removeMdiWindowFromMdiArea();
cleanupBeforeClose();
}
#endif
if ( changedField == &m_normalizeCurveYValues ) if ( changedField == &m_normalizeCurveYValues )
{ {
this->loadDataAndUpdate(); this->loadDataAndUpdate();