Qt调用JS脚本

该博客介绍如何在Qt应用中调用JavaScript脚本来执行计算任务。内容包括通过Qt5.10.1创建一个项目,设置.pro、.h、.cpp文件,以及一个名为TransCal.js的JS脚本。用户可以传递参数到JS函数进行四则运算,计算结果再回显到应用程序的界面上。文中还列出了多个参考资料,涉及Qt与JavaScript的交互、QtScript的使用以及JS数学函数的应用。

GitHub - mygit03/DoJS: Qt调用JS脚本(通过在程序里传参数调用js的函数进行计算,获取计算结果显示到界面)

基于 Qt5.10.1 调用 Python 脚本实现简单的四则运算

程序通过调用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数学函数的调用

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值