2010-09-17 15 views
2

J'ai créé une classe personnalisée disponible dans QtScript via un prototype. Une autre classe globale est également disponible qui devrait être utilisée pour imprimer la classe personnalisée générée dans QtScript.Erreur lors du passage de l'objet personnalisé de QtScript à C++

Ceci est ma classe personnalisée (très simple)):

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

C'est le prototype J'utilise:

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; 
}; 

Le setter/getter ne sont en train de changer/l'impression du message correspondant objet via un qscriptvalue_cast (QScriptable :: thisObject());

Maintenant regarde mon script comme ceci:

var test = new Message; 
test.source = 5; 
print(test.source); 
GlobalObject.sendMessage(test); 

Ainsi, le script compile bien et la commande d'impression() fait ce qu'il faut, il imprime 5. Mais le problème est la fonction sendMessage de mon GlobalObject:

void MessageAnalysis::sendMessage(Message msg) 
{ 
    qDebug() << "[Message]" << msg.source << msg.target; 
} 

Ce code imprime toujours: "[Message] 0 0". MessageAnalyse est enregistré en tant que "GlobalObject" pour QtScript. J'ai aussi enregistré Message et Message * comme Métatypes et le constructeur, le prototype et tout le reste. Cela semble fonctionner.

Est-ce que quelqu'un sait pourquoi les valeurs ont été modifiées dans QtScript mais ne sont pas accessibles depuis ma fonction C++? Ou ce que je fais mal?

Répondre

1

Ok. Après plusieurs tentatives, je l'ai réparé.
J'ai changé la fonction sendMessage pour accepter un QScriptValue au lieu d'un paramètre en tant que paramètre. Maintenant, je peux obtenir les propriétés sans problèmes. Semble fonctionner correctement maintenant :)