Название: Q_ENUMS в скриптах Отправлено: Sasha от Январь 16, 2014, 19:34 Здравствуйте,
Хочу использовать имена перечислений в скриптах, но что-то не получается. В документации сказано Цитировать Значения для перечислений объявленных с помощью Q_ENUMS не доступны в качестве свойств отдельных объектов-обёрток; вернее, они являются свойствами объекта-обёртки QMetaObject, который можно создать с помощью QScriptEngine::newQMetaObject(). Ссылка ведёт на следующее описание:Цитировать QScriptValue QScriptEngine::newQMetaObject ( const QMetaObject * metaObject, const QScriptValue & ctor = QScriptValue() ) А что дальше не понятно. Допустим, в этом QObject-е есть такое перечисление: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. Пример: Код See also newQObject() and scriptValueFromQMetaObject(). Код Как мне теперь его использовать в скрипте? Из всего вышесказанного в скрипте должно работать нечто вроде: Код или Код Но что-то не работает. Чего не хватает? Название: Re: Q_ENUMS в скриптах Отправлено: Sasha от Январь 16, 2014, 20:08 Извиняюсь, моя ошибка. Всё работает, просто в моей программе класс называется не QObject, как в примере, а по другому и я сделал переименование везде, кроме строчки
Код В результате создание объекта класса в скрипте работало, а вот перечисления не виделись ( ведь в QObject::staticMetaObject нет моих перечислений) Правда, пока продолжают не видиться перечисления, объявленные в других классах, но обёрнутые макросом Q_ENUMS в моём. Т.е. не видятся перечисления в таком случае: Код
Название: Re: Q_ENUMS в скриптах Отправлено: lesav от Январь 18, 2014, 16:22 Ничего не остается как сделать так:
Код
Название: Re: Q_ENUMS в скриптах Отправлено: Sasha от Январь 21, 2014, 10:39 Ничего не остается как сделать так: Да, так работает, но если поменяется eType в классе A нужно не забыть поменять и в C, что по-моему не есть хорошо. А что по другому никак? Может просто есть какой-то нюанс. Ведь в документации же сказано:Код
Цитировать If you want to register an enum that is declared in another class, the enum must be fully qualified with the name of the class defining it. In addition, the class defining the enum has to inherit QObject as well as declare the enum using Q_ENUMS(). т.е, вроде, просто нужно правильно двоеточия поставить, но примера нет. Кстати, класс A я наследовал от QObject и всё-равно не работает. |