我正在为我的 SW 编写脚本包装器,因此我可以通过脚本控制我的 SW。包装类的目的是将脚本接口与实际类分开,因为我可能不想公开类的所有信号和槽。我正在使用 Qt 5.13 和 QJSEngine。
我的问题是,根据我所阅读的内容和我所做的实验,似乎要能够公开一个枚举,它需要在一个继承 QObject 并通过 newQObject()/setProperty() 公开的类中。但是,我不想在下面的示例中公开类 Foo,但我仍然想将枚举 Foo::Bar 公开给脚本环境。我该怎么做呢?Q_ENUM 似乎假设枚举在 QObject 内,并且 QObject 在脚本环境中公开(属性)。这是我正在做的一个简短示例(我希望能够从脚本环境调用 FooWrapper::slot1() ):
class Foo : public QObject
{
Q_OBJECT
public:
Foo(QJSEngine& engine)
{
auto wrapper = new FooWrapper(this, engine);
}
enum class Bar
{
VAL1,
VAL2
};
public slots:
void slot1(Bar bar);
void slot2();
};
class FooWrapper : public QObject
{
Q_OBJECT
public:
Foo(Foo& foo, QJSEngine& engine)
: foo(&foo)
{
QJSValue obj = engine.newQObject(this);
auto gObj = engine.globalObject();
gObj.setProperty("foo", obj);
}
public slots:
void slot1(Bar bar)
{
foo->slot1(bar);
}
private:
Foo* foo;
};