首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QJSEngine中的访问动态特性

QJSEngine中的访问动态特性
EN

Stack Overflow用户
提问于 2014-04-07 23:17:35
回答 1查看 992关注 0票数 1

我可以访问传递到QObject中的QJSEngine的属性,但是为什么不能访问动态属性呢?

代码语言:javascript
复制
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;

返回:

代码语言:javascript
复制
4.2
35
0

使用QT5.2。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-08 05:12:45

似乎是QML中的一个bug。如果你用QScriptEngine代替,问题似乎就消失了,

代码语言:javascript
复制
#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;
}

结果:

代码语言:javascript
复制
35
35
45
45
 -------- 
30
0

因此,这看起来像QJSEngine中的一个bug,因为bahaviour与QScriptEngine不同。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22924829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档