3

このコードを機能させようとしているのは一日中です。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 関数を呼び出している) からの白い文字列と、「Interpreter Error: line 2: TypeError: Result of expression 'p.myPrint' [undefined] is not a function. 」myPrint からのエラー メッセージ。ドキュメンテーションのページを文字通りたどろうとしても、2 つの関数を Person プロトタイプに正しく接続できなかったと思います。ありがとう!

4

2 に答える 2

0

してはいけないこと:

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

なれ:

Person per = qscriptvalue_cast(c->thisObject());
于 2010-09-06T11:32:52.490 に答える
0

toString と myPrint の後の括弧を削除するとどうなりますか?

于 2010-08-23T13:59:22.477 に答える