gpt4 book ai didi

c++ - 将自定义对象从 QtScript 传递到 C++ 时出错

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:36:18 25 4
gpt4 key购买 nike

我已经编写了一个自定义类,它可以通过原型(prototype)在 QtScript 中使用。还有另一个全局类可用,它应该用于打印在 QtScript 中生成的自定义类。

这是我的自定义类(非常简单;)):

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

这是我使用的原型(prototype):

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* 注册为元类型以及构造函数、原型(prototype)和其他所有内容。这似乎有效。

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

最佳答案

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

关于c++ - 将自定义对象从 QtScript 传递到 C++ 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3734399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com