Qt使用QJSEngine执行脚本

Posted ay-a

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于Qt使用QJSEngine执行脚本的主要内容,如果未能解决你的问题,请参考以下文章

使用 QJSEngine 从 JavaScript 访问 Qt API

如何使用 QJSEngine 构建 API?

如何从 Qt 5.12 中的 QJSEngine 获取标准输出?

如何清理或销毁 QJSEngine?

QJSEngine 全局字符串比较

单个应用程序中有多个 QJSEngine 实例?