2

プロトタイプを介してQtScriptで利用できるカスタムクラスを作成しました。また、QtScriptで生成されたカスタムクラスを印刷するために使用する必要がある別のグローバルクラスも利用できます。

これは私のカスタムクラスです(非常に単純です;)):

class Message  
{  
public:  
  int source;  
  int target;  
};  

これは私が使用しているプロトタイプです:

class MessagePrototype : public QObject, public QScriptable
{
  Q_OBJECT
  Q_PROPERTY(int source READ getSource WRITE setSource)
  Q_PROPERTY(int target READ getTarget WRITE setTarget)
public:
  void setSource(const int source);
  int getSource() const;
  void setTarget(const int target);
  int getTarget() const;
};

セッター/ゲッターは、qscriptvalue_cast(QScriptable :: thisObject());を介して対応するメッセージオブジェクトを変更/出力するだけです。

これで、私のスクリプトは次のようになります。

var test = new Message;
test.source = 5;
print(test.source);
GlobalObject.sendMessage(test);

したがって、スクリプトは正常にコンパイルされ、print()コマンドは正常に動作し、5を出力します。しかし、問題は私のGlobalObjectのsendMessage関数です。

void MessageAnalysis::sendMessage(Message msg)
{
  qDebug() << "[Message]" << msg.source << msg.target;
}

このコードは常に「[メッセージ]00」を出力します。

MessageAnalysisは、QtScriptの「GlobalObject」として登録されています。また、メッセージとメッセージ*をメタタイプとして登録し、コンストラクター、プロトタイプ、その他すべてを登録しました。これはうまくいくようです。

QtScriptで値が変更されたのに、C ++関数からアクセスできない理由を誰かが知っていますか?または私が間違っていることは何ですか?

4

1 に答える 1

1

Ok。何度か試みた後、私はそれを修正しました。
sendMessage関数を変更して、パラメーターとしてメッセージではなくQScriptValueを受け入れるようにしました。これで、問題なくプロパティを取得できます。今はうまくいくようです:)

于 2010-09-17T11:26:07.830 に答える