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;
};

setter / getter 仅通过 qscriptvalue_cast(QScriptable::thisObject()); 更改/打印相应的 Message 对象。

现在我的脚本如下所示:

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”。

MessageAnalysis 注册为 QtScript 的“GlobalObject”。此外,我已将 Message 和 Message* 注册为元类型以及构造函数、原型和其他所有内容。这似乎有效。

有谁知道为什么 QtScript 中的值已更改但无法从我的 C++ 函数中访问?或者我做错了什么?

4

1 回答 1

1

好的。经过几次尝试,我修复了它。
我更改了 sendMessage 函数以接受 QScriptValue 而不是 Message 作为参数。现在我可以毫无问题地从中获取属性。现在似乎工作正常:)

于 2010-09-17T11:26:07.830 回答