【问题标题】:Access dynamic property in QJSEngine访问 QJSEngine 中的动态属性
【发布时间】:2014-04-07 23:17:35
【问题描述】:

我可以访问传递给QJSEngineQObjects 的属性,但为什么我不能访问动态属性?

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。

【问题讨论】:

    标签: c++ qt qjsengine


    【解决方案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 中的一个错误,因为行为与 QScriptEngine 不同。

    【讨论】:

    猜你喜欢
    • 2020-11-21
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 2013-07-12
    • 2016-04-10
    • 2011-08-10
    • 2010-12-28
    • 1970-01-01
    相关资源
    最近更新 更多