QtQuickScene Graph:删除子节点

时间:2018-06-14 07:46:02

标签: qt qtquick2

我开发了一个组件来绘制x和y数据曲线,这些曲线应该在qtquick应用程序中显示。为此,我创建了一个Plot类,派生自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添加的曲线)?

1 个答案:

答案 0 :(得分:0)

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

诀窍