我开发了一个组件来绘制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添加的曲线)?
答案 0 :(得分:0)
for(auto &curve : _curves) {
curve->setParent(nullptr);
curve->setParentItem(nullptr);
curve->deleteLater();
}
诀窍