Я добавляю QScript в мое приложение Qt. Я уже добавил метаданные и использовал некоторые функции метаданных для опроса через код на C++. Это отлично работает - я могу перемещаться по иерархии объектов и распечатывать значения (включая перечисления).QtScript plus enums
Но, я не вижу, чтобы получить перечисления, работающие в скрипте Qt.
У меня есть класс ...
class HalPin : public QObject
{
Q_OBJECT
public:
enum EHalPinType
{
Bit = HAL_BIT,
Float = HAL_FLOAT,
S32 = HAL_S32,
U32 = HAL_U32
};
enum EHalPinDirection
{
In = HAL_IN,
Out = HAL_OUT,
IO = HAL_IO
};
Q_ENUMS(EHalPinType)
Q_ENUMS(EHalPinDirection)
public:
explicit HalPin(QObject *parent = 0);
signals:
public slots:
};
Q_DECLARE_METATYPE(HalPin::EHalPinType)
Q_DECLARE_METATYPE(HalPin::EHalPinDirection)
Q_DECLARE_METATYPE(HalPin*)
У меня есть еще один класс, который имеет метод, который принимает в качестве аргументов перечислений ...
class EmcHal : public QObject
{
Q_OBJECT
public:
explicit EmcHal(QString moduleName, QObject *parent = 0);
signals:
public slots:
QObject *createHalPin(HalPin::EHalPinType, HalPin::EHalPinDirection, QString name);
};
Этот класс подвергается в другом классе - извините, я должен был упростить пример. Если я пишу следующий код JScript,
var nextPagePin1 = Emc.hal.createHalPin();
Я получаю сообщение об ошибке, я ожидал ...
SyntaxError: too few arguments in call to createHalPin(); candidates are createHalPin(HalPin::EHalPinType,HalPin::EHalPinDirection,QString)
Таким образом, оказывается, что типы перечислений известны QtScript.
То, что я пытаюсь сделать, это установить аргументы enum из jscript. Я пробовал много комбинаций ...
Bit
EHalPinType.Bit
HalPin.EHalPinType.Bit
и многие другие.
Если я пытаюсь использовать целые числа, я получаю ...
TypeError: cannot call createHalPin(): argument 1 has unknown type `HalPin::EHalPinType' (register the type with qScriptRegisterMetaType())
, который, кажется, подразумевает JScript не знает о моих перечислениях.
Любые предложения?
Нужно ли использовать qRegisterMetaType или qScriptRegisterMetaType для доступа к моим перечислениям? Документация не предполагает, что мне нужно это сделать. Нужно ли мне реализовать функции преобразователя для метода qScriptRegisterMetaType.
Или мой синтаксис просто неправильный для jscript?
У кого-нибудь есть рабочий пример?
Спасибо, Frank