2

由于Qt5.5 是实际的,QtScript因此已弃用。替换是QtQML 和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 中,我使用 qmlRegisterUncreatableType 注册节点。但是,我找不到注册 QList 的方法。

知道任何人的正确方法吗?

4

0 回答 0