Ошибка передачи пользовательского объекта из QtScript в C ++ - PullRequest
2 голосов
/ 17 сентября 2010

Я написал собственный класс, который доступен в 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 ++?Или что я делаю не так?

1 Ответ

1 голос
/ 17 сентября 2010

Хорошо.После нескольких попыток я это исправил.
Я изменил функцию sendMessage, чтобы принимать QScriptValue вместо Message в качестве параметра.Теперь я могу получить свойства из этого без проблем.Кажется, теперь работает нормально:)

...