QtQuickScene Graph:删除子节点

QtQuickScene Graph: Delete child node

我开发了一个组件来绘制 x 与 y 数据曲线,它应该显示在 qtquick 应用程序中。为此,我创建了一个 Plot class 派生自 QQuickItem:

#include <vector>
#include "plotcurve.h"

class Plot : public QQuickItem
{
  Q_OBJECT
public:

  Plot();
  void add_curve(std::vector<double>* xdata, std::vector<double>* ydata) {
       _curves.append(new PlotCurve(xdata,ydata,this));
  }

private:
  QVector<PlotCurve *> _curves;

protected:

};

它有一个 add_curve 函数,可以将 PlotCurve 对象作为子对象添加到 Plot 对象。

#include <QQuickItem>
#include <QSGGeometry>
#include <QSGGeometryNode>

class PlotCurve : public QQuickItem
{
    Q_OBJECT

public:
    PlotCurve(std::vector<double>* xdata, std::vector<double>*, QQuickItem *parent = 0): QQuickItem(parent) {...};

private:
    QSGGeometry * _geometry;
    QSGGeometryNode * _curve;

protected:
    QSGNode * updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *data) override;
};

PlotCurve使用类似于此示例的updatePaintNode函数:http://doc.qt.io/qt-5/qtquick-scenegraph-customgeometry-example.html绘制线条。

我现在想知道的是:如何将绘图对象重置为原始状态(删除通过 add_curve 添加的曲线)?

  for(auto &curve : _curves) {
    curve->setParent(nullptr);
    curve->setParentItem(nullptr);
    curve->deleteLater();
  }

成功了