2

Qt5.5 は実際のものであるため、QtScript非推奨です。置き換えはQtQML with 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