我已经编写了一个定制类,它通过原型在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++函数不能访问这些值吗?或者我做错了什么?