2

我正在为我的 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;
};
4

0 回答 0