Qt アプリケーションに QScript を追加しています。既にメタデータを追加しており、いくつかのメタデータ関数を使用して 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 に対して間違っていますか?
誰かが実用的な例を持っていますか?
ありがとう、フランク