Я написал собственный класс, который доступен в 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;
};
Только установщик / получательизменение / печать соответствующего объекта Message с помощью qscriptvalue_cast (QScriptable :: thisObject ());
Теперь мой сценарий выглядит следующим образом:
var test = new Message;
test.source = 5;
print(test.source);
GlobalObject.sendMessage(test);
Итак, сценарий компилируется нормально, и печатьКоманда () делает то, что должна, печатает 5. Но проблема заключается в функции sendMessage моего GlobalObject:
void MessageAnalysis::sendMessage(Message msg)
{
qDebug() << "[Message]" << msg.source << msg.target;
}
Этот фрагмент кода всегда печатает: «[Message] 0 0».
MessageAnalysis зарегистрирован как "GlobalObject" для QtScript.Также я зарегистрировал Message и Message * как Метатипы и конструктор, прототип и все остальное.Это похоже на работу.
Кто-нибудь знает, почему значения были изменены в QtScript, но недоступны из моей функции C ++?Или что я делаю не так?