如何将枚举类型注册到 QJSEngine 以从脚本环境中使用?
Posted
技术标签:
【中文标题】如何将枚举类型注册到 QJSEngine 以从脚本环境中使用?【英文标题】:How to register an enum type to QJSEngine to be used from the scripting environment? 【发布时间】:2020-01-14 07:02:09 【问题描述】:我已经连续搜索了几个小时,但我不知道如何从 C++ 端注册枚举类型,以便在使用 QJSEngine 时从脚本环境端使用它?
我有一个派生自 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 调用注释掉,但它似乎没有帮助。
【问题讨论】:
【参考方案1】:将Q_ENUM
放回原处并将其添加到构造函数中:
QJSValue meta = engine.newQMetaObject(&ScriptWrapper::staticMetaObject);
engine.globalObject().setProperty("ScriptWrapper", meta);
现在你可以像这样使用枚举了,例如
engine.evaluate("someClass.set(ScriptWrapper.Kek)");
【讨论】:
这行得通,谢谢!毕竟很简单,他们可以在 Qt 文档中真正阐明这部分内容。 @Dago 好吧......实际上它就在那里:doc.qt.io/qt-5/qjsengine.html#details。滚动到 QObject Integration,在代码之后:[...]类的枚举值可用作代理对象的属性。确实有点隐藏。以上是关于如何将枚举类型注册到 QJSEngine 以从脚本环境中使用?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Qt 5.12 中的 QJSEngine 获取标准输出?