Qt调用JS脚本

https://github.com/mygit03/DoJS


程序通过调用js脚本的函数执行计算(将计算公式写入js脚本,在程序中通过传参数调用js脚本中的函数进行计算,最后将计算结果返回,显示到界面)

//DoJS.pro

#-------------------------------------------------
#
# Project created by QtCreator 2017-03-22T10:16:33
#
#-------------------------------------------------

QT       += core gui script

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = DoJS
TEMPLATE = app


SOURCES += main.cpp\
        widget.cpp

HEADERS  += widget.h

FORMS    += widget.ui

DISTFILES += \
    TransCal.js

RESOURCES += \
    dojs.qrc
//widget.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

    void readJS();

private slots:
    void on_btn_cal_clicked();

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H
//widget.cpp
#include "widget.h"
#include "ui_widget.h"

#include <QDebug>
#include <QFile>
#include <QTextStream>
#include <QScriptEngine>
#include <QScriptValue>
#include <QScriptValueList>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    ui->lineEdit_var1->setText("12");
    ui->lineEdit_var2->setText("0.5");
}

Widget::~Widget()
{
    delete ui;
}

void Widget::readJS()
{
    QString result = "";
    QFile scriptFile(":/TransCal.js");
    if (!scriptFile.open(QIODevice::ReadOnly))
    {
        result.clear();
        qWarning() << "encodePass.js open failed";
        return;
    }
    QTextStream out(&scriptFile);
    QString contents = out.readAll();
    scriptFile.close();

    double var1 = ui->lineEdit_var1->text().toDouble();
    double var2 = ui->lineEdit_var2->text().toDouble();
    qDebug() << "var1:" << var1 << "var2:" << var2;

    QScriptValueList args;      //调用js方法时传入的参数
    args << QScriptValue(var1) << QScriptValue(var2);
    QScriptEngine engine;
    QScriptValue js = engine.evaluate(contents);        //个人理解:加载js文本到操作引擎
    QScriptValue func;
    func = engine.globalObject().property("trans2wCal");   //调用js方法
    result = func.call(QScriptValue(), args).toString();
    qDebug() << "result:" << result;
    ui->lineEdit_sub->setText(result);

    func = engine.globalObject().property("trans3wCal");   //调用js方法
    result = func.call(QScriptValue(), args).toString();
    qDebug() << "result:" << result;
    ui->lineEdit_mul->setText(result);
}

void Widget::on_btn_cal_clicked()
{
    readJS();
}

//TransCal.js
//trans.js

function trans2wCal(var1,var2)
{
    return var1+var2;
}

function trans3wCal(var1,var2)
{
    return var1*var2+5;
}
//资源文件:dojs.qrc

//界面:widget.ui



参考资料:

1.跨平台编程的利器—Qt:与Javascript的交互(为程序添加动态脚本)

2.Qt之QtScript(一)

3.Qt的Script、Quick、QML的关系与总结

4.QT脚本学习笔记

5.JavaScript函数及其参数数组简介

6.js中数学函数的使用

7.JS数学函数的调用

猜你喜欢

转载自blog.csdn.net/graceland525/article/details/64906354
今日推荐