QJSEngine против QtScript и QList‹MyClass›

Поскольку Qt 5.5 актуален, QtScript устарел. Замена Qt QML с QJSEngine. Сейчас я перепишу свой проект на новый движок. У меня есть несколько классов, например:

class Node : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QList<Node*> childs READ childs)

public:
    inline QList<Node*> childs() {
        return childsByID.values();
    }
    Q_INVOKABLE QList<Node*> someChilds(QString filter);
    Q_INVOKABLE Node* makeChild(/*some args*/); // returns maybe 0.

private:
    Node(Node* parent);

    QHash<QString, Node*> childsByID;
    QHash<QString, Node*> childsByXYZ;
};

Q_DECLARE_METATYPE(Node*)
Q_DECLARE_METATYPE(QList<Node*>)

и в QtScript зарегистрировал это с помощью:

qScriptRegisterMetaType(&engine, nodeToScriptValue, nodeFromScriptValue);
qScriptRegisterSequenceMetaType<QList<Node*>>(&engine);

В новом QJSEngine я регистрирую Node с помощью qmlRegisterUncreatableType. Но я не нахожу способ зарегистрировать QList.

Кто-нибудь знает правильный путь?


person Rico    schedule 07.07.2015    source источник
comment
@hellofunk говорит, что типы последовательностей QList C++ прозрачно поддерживаются в QML как типы массивов JavaScript здесь: stackoverflow.com/questions/6438157/   -  person Jay    schedule 07.07.2015
comment
Нет, только для QVariantList (QList‹QVariant›), но у меня нет конструктора копирования в моем классе, который необходимо скопировать в QVariant. Я не люблю копировать все свои QHash'ы и прочие вары.   -  person Rico    schedule 07.07.2015
comment
Я не думал, что qobjects были скопированы, потому что они основаны на интеллектуальных указателях. Извините, что не сработало.   -  person Jay    schedule 07.07.2015