LINUX.ORG.RU

Qt5 - QJSEngine enums

 ,


0

1

Есть QJSEngine который крутит в себе некий код на жс. Внутри него есть некий QObject внутри которого некоторые Q_INVOKABLE функции возвращают указатель на другие объекты типа QObject(тут, я так понимаю, неявно создаётся прокси аля newQMetaObject). Внутри тех объектов, которые возвращаются есть enum-ы. Типа:

class MyMegaType : public QObject
{
   Q_OBJECT
public:
   enum SomeState {
      OK = 0,
      FAIL = 1
   };

   Q_ENUM(SomeState);

   Q_INVOKABLE void test();
};

Из жс видно Q_INVOKABLE методы MyMegaType, но не видно того самого SomeState. В доках пишут, что newQMetaObject(которым неявно создаётся прокси на ссылку) должен енумы в проперти перекручивать для жс.

var a = root.someInvokableFuncReturnsMyMegaType(); // MyMegaType *

a.test(); // ok
a.SomeState.OK; // fail
a.OK; // fail

Как это сделать? В тырнетах кучи примеров для QML, но конкретно в JS они не работают.

★★★

Отакот:

MyMegaType.OK;

Есть ещё вариант:

namespace MyMegaType
{
  Q_NAMESPACE

  enum class SomeState {
    OK = 0,
    FAIL = 1
  };

  Q_ENUM_NS(SomeState)
}

qmlRegisterUncreatableMetaObject(MyMegaType::staticMetaObject, "MyMegaType", 1, 0, "SomeState", "I am enum");
import MyMegaType 1.0 as MyMegaType

console.log(MyMegaType.SomeState.OK);
Dendy ★★★★★
()
Ответ на: комментарий от Dendy

Это синтаксис импорта из *.js файлов.

import MyMegaType 1.0 as MyMegaType

так ошибка синтаксиса, ибо это синтаксис QML, а не JS

Странно кароче. Пока костыльнул через Q_PROPERTY(QVariantMap ...)

vova7890 ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.