我正在将 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 似乎知道枚举类型。
我正在努力做的是从 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 是错误的?
有人有一个工作的例子吗?
谢谢,弗兰克