程序通过调用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