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?
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
retour e> toScriptValue (personne()); ne devrait pas être return e-> toScriptValue (Person (x)); ? – user376258
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