Проблемы с QScript - PullRequest
       38

Проблемы с QScript

3 голосов
/ 23 августа 2010

Я целый день пытаюсь заставить этот код работать. Это должен быть тот же код, который представлен на странице справки 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);
...

Если я попытаюсь оценить следующий код в JavaScript

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

Я должен получить:

Guido
Guido

Вместо этого я действительно получаю белую строку из функции toString (вероятно, вызывает функцию Object.toString) и «Ошибка интерпретатора: строка 2: TypeError: Результат выражения 'p.myPrint' [undefined] функция. »сообщение об ошибке от myPrint. Я полагаю, что я не правильно подключил две функции к прототипу Person, даже если попытался немного проследить за страницами документации ... ПОЖАЛУЙСТА, может кто-нибудь объяснить мне, в чем моя вина ?! Спасибо!

Ответы [ 2 ]

0 голосов
/ 06 сентября 2010

Не должно:

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

быть:

Person per = qscriptvalue_cast(c->thisObject());
0 голосов
/ 23 августа 2010

что произойдет, если вы удалите скобки после toString и myPrint?

...