Как зарегистрировать тип перечисления в QJSEngine для использования из среды сценариев? - PullRequest
0 голосов
/ 14 января 2020

Я искал часы подряд, но не могу понять, как мне зарегистрировать тип enum со стороны 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);

};

Что мне нужно сделать, чтобы иметь возможность вызывать set () со стороны сценариев при использовании QJSEngine? Я попытался прокомментировать вызов Q_ENUM, но, похоже, он не помогает.

1 Ответ

1 голос
/ 14 января 2020

Верните Q_ENUM на место и добавьте это в конструктор:

QJSValue meta = engine.newQMetaObject(&ScriptWrapper::staticMetaObject);
engine.globalObject().setProperty("ScriptWrapper", meta);

Теперь вы можете использовать перечисление, например,

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