zoukankan      html  css  js  c++  java
  • Qt Script

    旧项目运行在Qt4.x上,要加上一个脚本逻辑,只能上Qt Script.(建议新项目使用QJSEngine)

    QT += script
    
    #include <QtScript>
    
    int cpp_func(int a, int b)
    {
        return a + b;
    }
    
    QScriptValue cpp_func_wrapper(QScriptContext *ctx, QScriptEngine *eng)
    {
        int a = ctx->argument(0).toInt32();
        int b = ctx->argument(1).toInt32();
        return cpp_func(a, b);
    }
    
    QScriptEngine engine;
    //向js中传递全局可用数据
    engine.globalObject().setProperty("name", "liyangyao");
    //向js中传递全局可用函数指针 (需要经过一层包装, 符合签名)
    QScriptValue cpp_func_ref = engine.newFunction(cpp_func_wrapper);
    engine.globalObject().setProperty("cpp_func", cpp_func_ref);
    
    //载入js
    QString script = readScript(":/script.js");
    QScriptValue object = engine.evaluate(script);
    if (object.isError())
    {
        qDebug()<<"line:"<<object.property("lineNumber").toInt32()<<" error:"<<object.toString();
        return 0;
    }
    
    //调用js中的全局函数
    qDebug()<<"execute script time:"<<time(NULL);
    QScriptValue func = engine.globalObject().property("js_func");
    if (func.isValid())
    {
        QScriptValue result = func.call(object, QScriptValueList()<<17);
        qDebug()<<"js_func return->"<<result.toString();
        //获取js中的全局变量
        qDebug()<<"context="<< engine.globalObject().property("context").toString();
    }
    else{
        qDebug()<<"js_func is not valid";
    }
    



  • 相关阅读:
    Codeforces Round #271 (Div. 2) C. Captain Marmot
    Codeforces Round #271 (Div. 2) F. Ant colony
    hdu 5002 Tree
    hdu 5052 Yaoge’s maximum profit
    hdu5044 Tree
    Codeforces Round #267 (Div. 2) D. Fedor and Essay
    hdu 4991 Ordered Subsequence
    暑假
    hdu4632 Palindrome subsequence
    【Oracle】【32】TRUNC 截取
  • 原文地址:https://www.cnblogs.com/danju/p/5077553.html
Copyright © 2011-2022 走看看