Здравствуйте,
Хочу использовать имена перечислений в скриптах, но что-то не получается.
В документации сказано
Значения для перечислений объявленных с помощью Q_ENUMS не доступны в качестве свойств отдельных объектов-обёрток; вернее, они являются свойствами объекта-обёртки QMetaObject, который можно создать с помощью QScriptEngine::newQMetaObject().
Ссылка ведёт на следующее описание:
QScriptValue QScriptEngine::newQMetaObject ( const QMetaObject * metaObject, const QScriptValue & ctor = QScriptValue() )
Creates a QtScript object that represents a QObject class, using the the given metaObject and constructor ctor.
Enums of metaObject (declared with Q_ENUMS) are available as properties of the created QScriptValue. When the class is called as a function, ctor will be called to create a new instance of the class.
Пример:
C++ (Qt)
QScriptValue mySpecialQObjectConstructor(QScriptContext *context,
QScriptEngine *engine)
{
QObject *parent = context->argument(0).toQObject();
QObject *object = new QObject(parent);
return engine->newQObject(object, QScriptEngine::ScriptOwnership);
}
...
QScriptValue ctor = engine.newFunction(mySpecialQObjectConstructor);
QScriptValue metaObject = engine.newQMetaObject(&QObject::staticMetaObject, ctor);
engine.globalObject().setProperty("QObject", metaObject);
QScriptValue result = engine.evaluate("new QObject()");
See also newQObject() and scriptValueFromQMetaObject().
А что дальше не понятно. Допустим, в этом QObject-е есть такое перечисление:
C++ (Qt)
...
enum eType{ Type1, Type2 };
Q_ENUMS( eType )
...
Как мне теперь его использовать в скрипте? Из всего вышесказанного в скрипте должно работать нечто вроде:
C++ (Qt)
var v = QObject.Type1;
или
C++ (Qt)
var v = QObject().Type1;
Но что-то не работает.
Чего не хватает?