如何将枚举类型注册到要从脚本环境使用的QJSEngine? 我已经搜索了几个小时,但是我无法确定如何从C++侧登记枚举类型,这样我就可以在使用QJS引擎?
我有一个从QObject派生的类,该类注册到脚本环境,并且有一个以枚举作为参数的函数。我希望能够从脚本环境中调用该函数如何将枚举类型注册到要从脚本环境使用的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
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:[…]类的枚举值可作为代理对象的属性使用。确实有点隐秘。