2010-08-23 21 views
3

這是我試圖讓這段代碼工作的一整天。它應該與QScript help page中提供的代碼相同,但不幸的是它根本不起作用!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功能的白線(probabily )調用Object.toString函數)和myPrint中的「解釋器錯誤:第2行:TypeError:表達式的結果'p.myPrint'[未定義]不是函數。」錯誤消息。我想我沒有正確地將兩個函數連接到Person原型,即使我嘗試着遵循文檔頁面的litteraly ...請有人可以解釋我是什麼故障?!謝謝!

回答

0

如果在toString和myPrint之後刪除括號,會發生什麼情況?

+0

如果刪除括號 變種p值=新的Person( 「吉」); p.toString; p.myPrint; 我沒有錯誤消息,但我還沒有 圭多 圭多 像我期待的,但一個空字符串... – Guido 2010-08-23 14:06:01

+0

返回E-> toScriptValue(人()); 不應該是 return e-> toScriptValue(Person(x)); ? – user376258 2010-08-23 14:22:13

+0

感謝您的通知!不幸的是它不是問題...... :(它繼續以相同的方式工作(toString的白色字符串和來自myPrint的錯誤消息) – Guido 2010-08-23 14:33:16

0

不應:

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

是:

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