代码之家  ›  专栏  ›  技术社区  ›  Tobias

将自定义对象从QtScript传递到C++的错误

  •  2
  • Tobias  · 技术社区  · 15 年前

    我已经编写了一个定制类,它通过原型在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;
    };
    

    setter/getter仅通过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;
    }
    

    这段代码总是打印:“[message]0 0”。

    对于qtscript,messageanalysis注册为“globalObject”。另外,我还将message和message*注册为metatypes以及构造函数、原型和其他所有类型。这似乎奏效了。

    有人知道为什么QtScript的值被改变了,但是我的C++函数不能访问这些值吗?或者我做错了什么?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Tobias    15 年前

    好啊。经过几次尝试,我把它修好了。
    我更改了sendmessage函数以接受qscriptValue而不是将message作为参数。现在我可以毫无问题地从中获取属性。 现在似乎工作得很好:)