如何将枚举类型注册到要从脚本环境使用的QJSEngine? 我已经搜索了几个小时,但是我无法确定如何从C++侧登记枚举类型,这样我就可以在使用QJS引擎?

如何将枚举类型注册到要从脚本环境使用的QJSEngine? 我已经搜索了几个小时,但是我无法确定如何从C++侧登记枚举类型,这样我就可以在使用QJS引擎?,c++,qt,qjsengine,C++,Qt,Qjsengine,我有一个从QObject派生的类,该类注册到脚本环境,并且有一个以枚举作为参数的函数。我希望能够从脚本环境中调用该函数 class ScriptWrapper : public QObject { Q_OBJECT public: ScriptWrapper(QJSEngine& engine) { QJSValue scriptVal = engine.newQObject(this); engine.globalObjec

我有一个从QObject派生的类,该类注册到脚本环境,并且有一个以枚举作为参数的函数。我希望能够从脚本环境中调用该函数

class ScriptWrapper : public QObject
{
    Q_OBJECT

  public:
    ScriptWrapper(QJSEngine& engine)
    {
        QJSValue scriptVal = engine.newQObject(this);
        engine.globalObject().setProperty("someClass", scriptVal);
    }

    enum class Foo
    {
        Bar,
        Kek
    };
    // Q_ENUM(Foo)

    Q_INVOKABLE void set(Foo foo);

};

当使用QJSEngine时,我需要做什么才能从脚本端调用set()?我已尝试注释掉Q_ENUM调用,但它似乎没有任何帮助。

Q_ENUM
恢复原位,并将其添加到构造函数中:

QJSValue meta = engine.newQMetaObject(&ScriptWrapper::staticMetaObject);
engine.globalObject().setProperty("ScriptWrapper", meta);
现在可以使用枚举,例如

engine.evaluate("someClass.set(ScriptWrapper.Kek)");

这很有效,谢谢!毕竟这很简单,他们可以在Qt文档中真正阐明这一部分。@Dago well。。。实际上它就在那里。在代码之后,滚动到QObject Integration:[…]类的枚举值可作为代理对象的属性使用。确实有点隐秘。