2014-04-07 62 views
1

我可以訪問傳入QJSEngineQObject的屬性,但爲什麼我無法訪問動態屬性?在QJSEngine中訪問動態屬性

auto myObject = new MyObject(); // Contains a single property 'myProp'. 

QJSEngine engine; 

auto scriptMyObject = engine.newQObject(myObject); 
engine.globalObject().setProperty("myObject" , scriptMyObject); 

engine.evaluate("myObject.myProp = 4.2"); 
cout << engine.evaluate("myObject.myProp").toNumber() << endl; 

myObject->setProperty("newProp", 35); 
cout << myObject->property("newProp").toInt() << endl; 

cout << engine.evaluate("myObject.newProp").toInt() << endl; 

返回:

4.2 
35 
0 

使用Qt 5.2。

回答

1

似乎它可能是QML中的一個錯誤。如果您使用的複製代碼QScriptEngine代替,這個問題似乎消失,

#include <QScriptEngine> 
#include <QCoreApplication> 
#include <QDebug> 

int main(int a, char *b[]) 
{ 
    QCoreApplication app(a,b); 
    auto myObject = new QObject; 
    QScriptEngine engine; 

    auto scriptMyObject = engine.newQObject(myObject); 

    myObject->setProperty("newProp", 35); 
    engine.globalObject().setProperty("myObject" , scriptMyObject); 
    qDebug() << myObject->property("newProp").toInt(); 
    qDebug() << engine.evaluate("myObject.newProp").toInteger(); 
    qDebug() << engine.evaluate("myObject.newProp = 45").toInteger(); 
    qDebug() << myObject->property("newProp").toInt(); 
    qDebug() << " -------- "; 
    // still can't create new properties from JS? 
    qDebug() << engine.evaluate("myObject.fancyProp = 30").toInteger(); 
    qDebug() << myObject->property("fancyProp").toInt(); 

    return 0; 
} 

結果

35 
35 
45 
45 
-------- 
30 
0 

因此,這看起來像在QJSEngine的錯誤作爲bahaviour從複製代碼QScriptEngine不同。

+0

你說得對,它似乎是迴歸。我在這裏打開了一個bug:https://bugreports.qt-project.org/browse/QTBUG-38181 – cmannett85

+0

這不是一個錯誤,qt取消了對QJSEngine的支持:http://doc.qt.io /qt-5/qjsengine.html(搜索動態QObject屬性章節) – jaba