.pro文件加入以下代码
QT += xml script
或VS中”属性》链接器》输入》附加依耐项“中加入以下附加项
$(QTDIR)\lib\Qt5Scriptd.lib
头文件
#include <QtScript/QtScript>//脚本执行头文件
脚本执行
//************************************
// 方法名称: execScript
// 概要: 执行脚本
// 返回值: QString 输出内容
//参数: QScriptEngine eng //脚本执行引擎
//参数: QScriptValue func, //脚本执行引擎
//参数: QScriptValueList args //传入参数列表
//************************************
QString execScript(QScriptEngine& eng,QScriptValue& func,QScriptValueList& args)
{
//脚本返回值
QString outStr = "";
//执行脚本
QScriptValue resultVal = func.call(QScriptValue(), args);
if (eng.hasUncaughtException())
{
outStr += "异常:" + eng.uncaughtException().toString() + "\n";
outStr += QString("异常位置:第%1行\n").arg(eng.uncaughtExceptionLineNumber());
outStr += "堆栈:" + eng.uncaughtExceptionBacktrace().join("/n");
}
else if (resultVal.isString())
{
outStr = resultVal.toString();
}
else if (resultVal.isNumber())
{
outStr = QString::number(resultVal.toNumber());
}
return outStr;
}
调用脚本
//脚本内容
QString ScriptTxt = ui->textEdit_Script->toPlainText();
//参数列表
QStringList strList1, strList2;
//测试数据
strList1 << "1" << "2" << "3";
strList2 << "3" << "2" << "1";
QScriptEngine eng;//脚本执行引擎
QScriptValue func;
//设置脚本
eng.evaluate(ScriptTxt);
func = eng.globalObject().property("TextDataScript");
//传入参数列表 可以是一个或多个参数列表
QScriptValueList args;
QScriptValue Vals1;//参数列表1
QScriptValue Vals2;//参数列表2
Vals1 = eng.newArray(strList1.count());
Vals2 = eng.newArray(strList2.count());
for (int i = 0; i < strList1.count(); i++)
{
Vals1.setProperty(i, strList1[i]);
}
for (int i = 0; i < strList2.count(); i++)
{
Vals2.setProperty(i, strList2[i]);
}
args.append(Vals1);
args.append(Vals2);
//执行脚本,获取输出
QString outStr = execScript(eng, func, args);
//输出
ui->textEdit_output->setText(outStr);
脚本模板
/********************************************
* Name: 脚本模板函数
* Detail:
* Params: Attr1,Attr2
* Return: str —输出文本
********************************************/
function TextDataScript(Attr1, Attr2)
{
//在此处添加您的脚本
str = "21312";
/*if (Attr1[0] == Attr2[0])
{
str = "equal";
}
else
{
str = "not equal";
}*/
return str;
}