Где сделать инициализацию членов типа QML? - PullRequest
0 голосов
/ 09 августа 2011

Я создал многоугольник пользовательского типа

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

Точка также является сгенерированным мной типом.

Я работаю с вершинами с помощью строки в 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 голосов
/ 08 октября 2011

Согласно документации, если ваш Polygon наследует от QDeclarativeItem, вы также можете реализовать интерфейс QDeclarativeParserStatus , и вы будете уведомлены, когда компонент будет готов и значения будут инициализированы.

Товыглядит как хорошее место для обновления вашего vPnt QVector.

(лично я не тестировал это решение)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...