我可以访问传递到QObject中的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使用QT5.2。
发布于 2014-04-08 05:12:45
似乎是QML中的一个bug。如果你用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中的一个bug,因为bahaviour与QScriptEngine不同。
https://stackoverflow.com/questions/22924829
复制相似问题