zoukankan      html  css  js  c++  java
  • Qt使用QJSEngine执行脚本

    有时候需要进行一些计算,程序是使用c++来实现的,使用c++来进行计算不是很灵活,这时候可以使用脚本来进行计算,这样灵活,且易于扩展。写了一个简单的Demo进行验证,具体例子如下。

    #include <QCoreApplication>
    #include <QJSEngine>
    #include <QString>
    #include <QFile>
    #include <QTextStream>
    #include <string>
    
    int main(int argc, char *argv[])
    {
       QCoreApplication a(argc, argv);
    
       // load javascript file. //
       std::string strJsFilePath = "./test.js";
       QString FileName = QString::fromStdString(strJsFilePath);  //QString(QString::fromLocal8Bit(strJsFilePath.c_str()));
    
       QFile scriptFile(FileName);
       if (!scriptFile.open(QIODevice::ReadOnly | QIODevice::Text))
       {
           printf("Load Js File Failed, FilePath: %s
    ", strJsFilePath.c_str());
           return  -1;
       }
       QTextStream stream(&scriptFile);
       QString JsContents = stream.readAll();
    
       QJSEngine JsEngine;
    
      // 使用jsEngine 记载js脚本 //
       JsEngine.evaluate(JsContents, FileName);
        
        // get js function. //
       QJSValue JsfuncAdd = JsEngine.globalObject().property("Add");
       QJSValue JsfuncSub = JsEngine.globalObject().property("Sub");
    
        // 执行js中的函数 //
       QJSValueList args;
       args << 30 << 15;
       QJSValue result = JsfuncAdd.call(args);   // call js function add. //
       double ResVal = result.toNumber();
    
       result = JsfuncSub.call(args);  // call js function sub. //
       ResVal = result.toNumber();
    
       return  0;
       // return a.exec();
    }
    
    

    调用的js脚本如下,两个函数一个进行加法运算,一个进行减法运算。

    function Add(a, b)
    {
        return a + b;
    }
    
    function Sub(a, b)
    {
        return a - b;
    }
    

    注意: 需要再pro文件中加上 QT += core qml

  • 相关阅读:
    【XSY3905】字符串题(lyndon串,构造)
    【XSY3904】直线(分块)
    收藏的数学网址
    Music!
    Codeforces Global Round 12
    Codeforces Round #698 (Div. 2)
    Codeforces Round #727 (Div. 2)
    Croatian Open Competition in Informatics (COCI) 2020/2021 — Round #2
    Tokio Marine & Nichido Fire Insurance Programming Contest 2021 (AtCoder Regular Contest 122)
    NowCoder IOI 周赛 26 [提高组]
  • 原文地址:https://www.cnblogs.com/ay-a/p/13190155.html
Copyright © 2011-2022 走看看