summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSami Varanka <sami.varanka@qt.io>2024-03-28 09:52:03 +0200
committerSami Varanka <sami.varanka@qt.io>2024-03-28 10:34:33 +0200
commit067e75c383cac25d884473f29b94b4ab07793bc8 (patch)
tree67b8ec146fe66d2798448b66dddf763e34339735
parent4ad1672c1a629347037c1ee1199a81c53893e8e8 (diff)
Fix crashing surface and scatter removeseries
Add check for nullptr before calling deleteLater for the presenting 3D model. Fixes: QTBUG-123418 Change-Id: I85963b97079d4f99fdc1ef4c7a84e88392d92acb Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
-rw-r--r--src/graphs3d/qml/qquickgraphsscatter.cpp12
-rw-r--r--src/graphs3d/qml/qquickgraphssurface.cpp18
-rw-r--r--src/graphs3d/qml/qquickgraphssurface_p.h1
-rw-r--r--tests/auto/cpptest/qginput/tst_input.cpp2
4 files changed, 22 insertions, 11 deletions
diff --git a/src/graphs3d/qml/qquickgraphsscatter.cpp b/src/graphs3d/qml/qquickgraphsscatter.cpp
index 813ab4c..8130fd0 100644
--- a/src/graphs3d/qml/qquickgraphsscatter.cpp
+++ b/src/graphs3d/qml/qquickgraphsscatter.cpp
@@ -665,12 +665,14 @@ QString QQuickGraphsScatter::getMeshFileName(QAbstract3DSeries *series)
void QQuickGraphsScatter::deleteDataItem(QQuick3DModel *item)
{
QQmlListReference materialsRef(item, "materials");
- if (materialsRef.size()) {
- QObject *material = materialsRef.at(0);
- delete material;
+ if (item) {
+ if (materialsRef.size()) {
+ QObject *material = materialsRef.at(0);
+ delete material;
+ }
+ item->deleteLater();
+ item = nullptr;
}
- item->deleteLater();
- item = nullptr;
}
void QQuickGraphsScatter::handleSeriesChanged(QList<QAbstract3DSeries *> changedSeries)
diff --git a/src/graphs3d/qml/qquickgraphssurface.cpp b/src/graphs3d/qml/qquickgraphssurface.cpp
index e4a7a89..fc4b835 100644
--- a/src/graphs3d/qml/qquickgraphssurface.cpp
+++ b/src/graphs3d/qml/qquickgraphssurface.cpp
@@ -660,12 +660,12 @@ void QQuickGraphsSurface::removeSeries(QSurface3DSeries *series)
series->setParent(this); // Reparent as removing will leave series parentless
for (int i = 0; i < m_model.size();) {
if (m_model[i]->series == series) {
- m_model[i]->model->deleteLater();
- m_model[i]->gridModel->deleteLater();
- m_model[i]->proxyModel->deleteLater();
+ delete3DModel(m_model[i]->model);
+ delete3DModel(m_model[i]->gridModel);
+ delete3DModel(m_model[i]->proxyModel);
if (sliceView()) {
- m_model[i]->sliceModel->deleteLater();
- m_model[i]->sliceGridModel->deleteLater();
+ delete3DModel(m_model[i]->sliceModel);
+ delete3DModel(m_model[i]->sliceGridModel);
}
m_model.removeAt(i);
} else {
@@ -2151,6 +2151,14 @@ void QQuickGraphsSurface::addSliceModel(SurfaceModel *model)
model->sliceGridModel = gridModel;
}
+void QQuickGraphsSurface::delete3DModel(QQuick3DModel *model)
+{
+ if (model) {
+ model->deleteLater();
+ model = nullptr;
+ }
+}
+
void QQuickGraphsSurface::updateSingleHighlightColor()
{
m_instancing->setColor(theme()->singleHighlightColor());
diff --git a/src/graphs3d/qml/qquickgraphssurface_p.h b/src/graphs3d/qml/qquickgraphssurface_p.h
index 3005da3..3c170b4 100644
--- a/src/graphs3d/qml/qquickgraphssurface_p.h
+++ b/src/graphs3d/qml/qquickgraphssurface_p.h
@@ -234,6 +234,7 @@ private:
void updateSelectedPoint();
void addModel(QSurface3DSeries *series);
void addSliceModel(SurfaceModel *model);
+ void delete3DModel(QQuick3DModel *model);
QVector<SurfaceModel *> m_model;
QQuick3DModel *m_selectionPointer = nullptr;
diff --git a/tests/auto/cpptest/qginput/tst_input.cpp b/tests/auto/cpptest/qginput/tst_input.cpp
index 8e29002..497f2e2 100644
--- a/tests/auto/cpptest/qginput/tst_input.cpp
+++ b/tests/auto/cpptest/qginput/tst_input.cpp
@@ -3,7 +3,7 @@
#include <QtTest/QtTest>
-#include <QtGraphs/Q3DBars>>
+#include <QtGraphs/Q3DBars>
#include <QtGraphs/Q3DInputHandler>
class tst_input: public QObject