在哪里进行QML类型成员的初始化?

时间:2011-08-09 18:13:20

标签: qml

我生成了一个自定义类型的多边形

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没有被那个时间初始化? 谢谢你的任何想法。

1 个答案:

答案 0 :(得分:0)

根据文档,如果你的Polygon继承自QDeclarativeItem,那么你也可以实现QDeclarativeParserStatus接口,当组件准备好并且值已经初始化时,你会收到通知。

这似乎是更新vPnt QVector的好地方。

(我没有亲自测试过这个解决方案)