我编写了一个自定义类,可以通过原型在 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++ 函数中访问?或者我做错了什么?