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();
}
成功了
我开发了一个组件来绘制 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();
}
成功了