2010-08-23 6 views
3

C'est toute la journée que j'essaie de faire fonctionner ce code. Il devrait être le même code présenté dans le QScript help page mais malheureusement, il ne fonctionne pas du tout!Problèmes avec QScript

class Person 
{ 
public: 
QString nm; 

Person() 
{ 

} 

Person(QString& name) 
    :nm(name) 
{ 

} 
}; 

Q_DECLARE_METATYPE(Person) 
Q_DECLARE_METATYPE(Person*) 

QScriptValue Person_ctor(QScriptContext* c,QScriptEngine* e) 
{ 
QString x = c->argument(0).toString(); 
return e->toScriptValue(Person(x)); 
} 

QScriptValue Person_prototype_toString(QScriptContext* c,QScriptEngine* e) 
{ 
Person* per = qscriptvalue_cast(c->thisObject()); 
qDebug(qPrintable(per->nm)); 
return e->undefinedValue(); 
} 


.... 
QScriptValue per_ctr = eng->newFunction(Person_ctor); 
per_ctr.property("prototype").setProperty("toString",eng->newFunction(Person_prototype_toString)); 
per_ctr.property("prototype").setProperty("myPrint",eng->newFunction(Person_prototype_toString)); 
eng->globalObject().setProperty("Person",per_ctr); 
... 

Si je tente d'évaluer le code suivant dans JavaScript

var p = new Person("Guido"); 
p.toString(); 
p.myPrint(); 

J'obtiendrais:

Guido 
Guido 

place ce que j'obtiens vraiment est une chaîne blanche de la fonction toString (probabily appelle la fonction Object.toString) et une erreur "Interpreter Error: ligne 2: TypeError: Résultat de l'expression 'p.myPrint' [non défini] n'est pas une fonction." message d'erreur de myPrint. Je suppose que je n'ai pas connecté correctement les deux fonctions au prototype Person même si j'ai essayé de suivre littéralement les pages de documentation ... PLEASE Quelqu'un pourrait m'expliquer quelle est ma faute?!? Merci! Que se passe-t-il si vous supprimez les parenthèses après toString et myPrint?

Répondre

0

+0

si je supprimer les crochets var p = new Person ("Guido"); p.toString; p.myPrint; Je n'ai pas de messages d'erreur, mais je n'ai pas Guido Guido comme j'attendais, mais une chaîne vide ... – Guido

+0

retour e> toScriptValue (personne()); ne devrait pas être return e-> toScriptValue (Person (x)); ? – user376258

+0

merci pour la notification! Malheureusement ce n'est pas le problème ... :(il continue à agir de la même manière (chaîne blanche de toString et message d'erreur de myPrint) – Guido

0

ne devrait pas:

Person* per = qscriptvalue_cast(c->thisObject()); 

être:

Person per = qscriptvalue_cast(c->thisObject());