Я добавляю QScript в свое приложение Qt.Я уже добавил метаданные и использую некоторые функции метаданных для опроса кода C ++.Это отлично работает - я могу перемещаться по иерархии объектов и выводить значения (включая перечисления).
Но я не вижу, чтобы перечисления работали в сценарии 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