我生成了一个自定义类型的多边形
Polygon {
id: aPieChart
anchors.centerIn: parent
width: 100; height: 100
name: "A simple polygon"
color: "blue"
vertices:[
Point{x:20.0; y:40.0},
Point{x:40.0; y:40.0},
Point{x:20.0; y:20.0}
]
}
这是我的polygon.h文件:
#ifndef POLYGON_H
#define POLYGON_H
#include <QDeclarativeItem>
#include <QColor>
#include "point.h"
class Polygon : public QDeclarativeItem
{
Q_OBJECT
Q_PROPERTY(QString name READ name WRITE setName)
Q_PROPERTY(QColor color READ color WRITE setColor)
Q_PROPERTY(QDeclarativeListProperty<Point> vertices READ vertices)
public:
Polygon(QDeclarativeItem *parent = 0);
QString name() const;
void setName(const QString &name);
QColor color() const;
void setColor(const QColor &color);
QDeclarativeListProperty<Point> vertices();
static void append_vertex(QDeclarativeListProperty<Point> *list, Point *vertex);
//void Polygon::dragEnterEvent(QGraphicsSceneDragDropEvent *event);
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
private:
QString m_name;
QColor m_color;
QList<Point *> m_vertices;
};
#endif // POLYGON_H
Point也是我生成的一种类型。
我用polygon.h中的一行处理顶点:
Q_PROPERTY(QDeclarativeListProperty<Point> vertices READ vertices)
因为需要使用积分作为QVector,
我使用这些行,m_vertices是处理从QML获得的顶点数组的变量名:
QVector<QPointF> vPnt;
for(int i=0;i<m_vertices.length();i++){
vPnt.append(QPointF(m_vertices.at(i)->x(),m_vertices.at(i)->y()));
}
我想问一下我应该把这些行放在哪里。 在油漆?然后这些线一次又一次地在油漆被调用的地方运行? 那么在构造函数中,m_vertices没有被那个时间初始化? 谢谢你的任何想法。
答案 0 :(得分:0)
根据文档,如果你的Polygon继承自QDeclarativeItem,那么你也可以实现QDeclarativeParserStatus接口,当组件准备好并且值已经初始化时,你会收到通知。
这似乎是更新vPnt QVector的好地方。
(我没有亲自测试过这个解决方案)