Qt运行javascript脚本利用QScriptValueList

0 1020
索鸟 2020-08-19
需要:0索币

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

//DoJS.pro

  1. #-------------------------------------------------
  2. #
  3. # Project created by QtCreator 2017-03-22T10:16:33
  4. #
  5. #-------------------------------------------------
  6. QT += core gui script
  7. greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
  8. TARGET = DoJS
  9. TEMPLATE = app
  10. SOURCES += main.cpp\
  11. widget.cpp
  12. HEADERS += widget.h
  13. FORMS += widget.ui
  14. DISTFILES += \
  15. TransCal.js
  16. RESOURCES += \
  17. dojs.qrc

//widget.h

  1. #ifndef WIDGET_H
  2. #define WIDGET_H
  3. #include <QWidget>
  4. namespace Ui {
  5. class Widget;
  6. }
  7. class Widget : public QWidget
  8. {
  9. Q_OBJECT
  10. public:
  11. explicit Widget(QWidget *parent = 0);
  12. ~Widget();
  13. void readJS();
  14. private slots:
  15. void on_btn_cal_clicked();
  16. private:
  17. Ui::Widget *ui;
  18. };
  19. #endif // WIDGET_H

//widget.cpp

  1. #include "widget.h"
  2. #include "ui_widget.h"
  3. #include <QDebug>
  4. #include <QFile>
  5. #include <QTextStream>
  6. #include <QScriptEngine>
  7. #include <QScriptValue>
  8. #include <QScriptValueList>
  9. Widget::Widget(QWidget *parent) :
  10. QWidget(parent),
  11. ui(new Ui::Widget)
  12. {
  13. ui->setupUi(this);
  14. ui->lineEdit_var1->setText("12");
  15. ui->lineEdit_var2->setText("0.5");
  16. }
  17. Widget::~Widget()
  18. {
  19. delete ui;
  20. }
  21. void Widget::readJS()
  22. {
  23. QString result = "";
  24. QFile scriptFile(":/TransCal.js");
  25. if (!scriptFile.open(QIODevice::ReadOnly))
  26. {
  27. result.clear();
  28. qWarning() << "encodePass.js open failed";
  29. return;
  30. }
  31. QTextStream out(&scriptFile);
  32. QString contents = out.readAll();
  33. scriptFile.close();
  34. double var1 = ui->lineEdit_var1->text().toDouble();
  35. double var2 = ui->lineEdit_var2->text().toDouble();
  36. qDebug() << "var1:" << var1 << "var2:" << var2;
  37. QScriptValueList args; //调用js方法时传入的参数
  38. args << QScriptValue(var1) << QScriptValue(var2);
  39. QScriptEngine engine;
  40. QScriptValue js = engine.evaluate(contents); //个人理解:加载js文本到操作引擎
  41. QScriptValue func;
  42. func = engine.globalObject().property("trans2wCal"); //调用js方法
  43. result = func.call(QScriptValue(), args).toString();
  44. qDebug() << "result:" << result;
  45. ui->lineEdit_sub->setText(result);
  46. func = engine.globalObject().property("trans3wCal"); //调用js方法
  47. result = func.call(QScriptValue(), args).toString();
  48. qDebug() << "result:" << result;
  49. ui->lineEdit_mul->setText(result);
  50. }
  51. void Widget::on_btn_cal_clicked()
  52. {
  53. readJS();
  54. }


//TransCal.js

  1. //trans.js
  2. function trans2wCal(var1,var2)
  3. {
  4. return var1+var2;
  5. }
  6. function trans3wCal(var1,var2)
  7. {
  8. return var1*var2+5;
  9. }

//资源文件:dojs.qrc

 

//界面:widget.ui

回帖
  • 消灭零回复
相关主题
2020年最新最新Kubernetes视频教程(K8s)教程 2
程序员转型之制作网课变现,月入过万告别996 1
索鸟快传2.0发布啦 1
两个不同网络的电脑怎么实现文件的互相访问呢? 1
网盘多账号登录软件 1
Java实战闲云旅游项目基于vue+element-ui 1
单点登录技术解决方案基于OAuth2.0的网关鉴权RSA算法生成令牌 1
QT5获取剪贴板上文本信息QT设置剪贴板内容 1
springboot2实战在线购物系统电商系统 1
python web实战之爱家租房项目 1
windows COM实用入门教程 1
C++游戏开发之C++实现的水果忍者游戏 1
计算机视觉库opencv教程 1
node.js实战图书管理系统express框架实现 1
C++实战教程之远程桌面远程控制实战 1
相关主题
PHP7报A non well formed numeric value encountered 0
Linux系统下关闭mongodb的几种命令分享 0
mongodb删除数据、删除集合、删除数据库的命令 0
Git&Github极速入门与攻坚实战课程 0
python爬虫教程使用Django和scrapy实现 0
libnetsnmpmibs.so.31: cannot open shared object file 0
数据结构和算法视频教程 0
redis的hash结构怎么删除数据呢? 0
C++和LUA解析器的数据交互实战视频 0
mongodb errmsg" : "too many users are authenticated 0
C++基础入门视频教程 0
用30个小时精通C++视频教程可能吗? 0
C++分布式多线程游戏服务器开发视频教程socket tcp boost库 0
C++培训教程就业班教程 0
layui的util工具格式时间戳为字符串 0
C++实战教程之远程桌面远程控制实战 1
网络安全培训视频教程 0
LINUX_C++软件工程师视频教程高级项目实战 0
C++高级数据结构与算法视频教程 0
跨域问题很头疼?通过配置nginx轻松解决ajax跨域问题 0