需求是这样的:

需要给一个硬件接口测试些东西,用js来调用,js做成不同的独立模块分别测试不同的硬件接口,包括DMD内存,PCIE带宽等等。需要用一个exe来载入这些js文件分别调用测试模块。exe用Qt来做。就只能用QtScript模块了么。

QtScript是一个解释脚本的引擎 符合EMCAScript标准。

 1 void test_js::ExecuteJsFile(){
 2
 3     QScriptEngine engine;
 4
 5     if(JsFilePath.isEmpty()){
 6         qDebug() << "No JavaScript File, Please check it!" <<endl;
 7         return ;
 8     }
 9
10
11     engine.installTranslatorFunctions();
12
13     Interfaces pcie;  //pcie  public add  slot  or  check lineedit settext
14     QScriptValue scriptButton = engine.newQObject(&pcie);//生成C++对象的代理脚本对象
15     engine.globalObject().setProperty("button", scriptButton);//将对象注册到javascript
16
17     QString fileName(JsFilePath);
18     QFile scriptFile(fileName);
19     scriptFile.open(QIODevice::ReadOnly);
20     QTextStream stream(&scriptFile);
21     QString contents = stream.readAll();
22     scriptFile.close();
23
24     QScriptValue result = engine.evaluate(contents,fileName);
25
26
27
28     //parsing js format error
29     if(result.isError()) {
30
31
32         qDebug() << "Error File Name is "  << fileName << endl;
33         qDebug() << "Error line number is" << result.property("lineNumber").toInt32() << endl;
34         qDebug() << "Error Details is "    << result.toString() << endl;
35         return ;
36     }
37
38     qDebug() << fileName <<" 's Result: " <<  result.toInt32() <<endl;
39
40 }

Interfaces 这个类的头文件是这样的:
1 #ifndef INTERFACES_H
2 #define INTERFACES_H
3 #include <QtCore/QObject>
4 class Interfaces : public QObject{
5     Q_OBJECT
6   public slots:
7       void pcie_interface();
8 };
9 #endif

对应的实现文件:

1 #include <QtCore/QDebug>
2 #include "test_interfaces.h"
3
4 using namespace std;
5
6 void Interfaces::pcie_interface(){
7     qDebug() << "called fuck!" << endl;
8 }

下面,javascript文件里面调用pcie_interface()函数,注意,以上pcie_interface函数必须声明成槽函数,不然会报错。

1 //helloscript.js
2 button.pcie_interface();

references:

http://blog.csdn.net/guxch/article/details/7656846

http://blog.csdn.net/bbjjqq/article/details/6164291

http://blog.csdn.net/liuhongwei123888/article/details/6162159

Qt编程之QtScript相关推荐

  1. Qt编程之Xml文件的读取

    目录 一.xml的格式说明 二.QT中读取xml的类与常用函数 三.代码思路 四.代码实现 五.结果展示 XML最主要的功能是数据传输,有的时候可以当一个小型的数据库来使用,因为其定义标签高度自由,所 ...

  2. Linux下QT编程之MQTT实战

    应课设要求需要使用MQTT通信协议进行网关开发,所以就花了时间捣鼓一下,也遇到很多的坑所以写了这篇博客记录一下. 1.mqtt服务器有很多在这里我选择EMQ X因为这个是开源并且还有可视化的后台管理便 ...

  3. Qt编程之QTreeWidget使用方法

    ui->treeWidget->setColumnCount(1);ui->treeWidget->setHeaderLabel("中华人民共和国");QT ...

  4. Qt编程之对QGraphicsItem点击右键弹出菜单

    就是对这个contextMenuEvent 事件重新实现,在这个事件函数中创建菜单,大概就是这样. 1 void MyItem::contextMenuEvent(QGraphicsSceneCont ...

  5. python qt5 增加文本框_Python用PyQt5制作弹出式输入框,Qt图形界面编程之QInputDialog...

    前面内容,我们介绍了PyQt5的一些常用基本控件. 温故而知新 计数器QSpinBox使用详解,Python用PyQt5制作图形界面基础控件篇 Python用PyQt5实现多种弹出消息框,QMessa ...

  6. python高手养成_Python用PyQt5制作颜色对话框,PyQt图形界面编程之QColorDialog

    前几篇内容我们介绍了PyQt5中3种常见的标准弹出对话框. 弹出对话框更加方便人机交流 Qt图形界面编程之QFileDialog类,Python用PyQt5制作文件对话框 如何通过Qt界面设置字体属性 ...

  7. 基于STM32MP157的GPU编程之DRM驱动调试

    linux系统GPU编程之DRM编程 背景: framebuffer大家都知道哈,打开/dev/fb0设备节点,然后开辟一段内存(即显存),再mmap,在吧图形数据填充到这段显存里面.怎么填,比如QT ...

  8. 异步编程之Promise(2):探究原理

    异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2):探究原理 异步编程之Promise(3):拓展进阶 异步编程之Generator(1)--领略魅 ...

  9. cyclicbarrier java_Java并发编程之CyclicBarrier和线程池的使用

    原标题:Java并发编程之CyclicBarrier和线程池的使用 下面我们来讲述一下线程池和CyclicBarrier的使用和对比. 一.场景描述 有四个游戏玩爱好者玩游戏,游戏中有三个关卡,每一个 ...

最新文章

  1. 大势所趋!Octane Raceway开辟VR竞技场
  2. Spring 配置标签——util标签
  3. 通过反射获取无参无返回值成员方法并使用
  4. python 发包爬取中国移动充值页面---可判断手机号是否异常
  5. new关键字执行过程
  6. [翻译] UPCardsCarousel
  7. 1-2+3-4+......+99 除去88的和
  8. et文件怎么转成excel_图片转PDF怎么转?这些都是文件转换的好方法!
  9. proteus 仿真软件
  10. 租房软件隐私保护如同虚设
  11. 使用Excel 2007绘制甘特图
  12. 光猫的ip地址段和路由器ip地址段互换
  13. echarts 3d
  14. 双击计算机图标无法打开,我的电脑图标打不开_我的电脑双击打不开了
  15. java怎么对数组中数据进行降序排序?
  16. 经典神经网络分类器之BP算法和自组织竞争网络
  17. delphi直接打印jpg文件
  18. java.lang.AbstractMethodError: org.apache.tomcat.websocket.server.WsSessionListener.sessionCreated(L
  19. ANSYS Fluent 压力基求解方法
  20. 基于python的接口录制平台的设计与开发

热门文章

  1. python中find函数的使用方法_Python教程-String 字符串使用教程
  2. linux新建java文件夹删除不了怎么办_Linux无法删除文件夹 Device or resource busy
  3. java 文件大小,如何在Java中获取文件大小
  4. c语言字符数组赋值_C语言关于结构体字符成员元素赋值的方法
  5. python pdf转html代码_Python3转换html到pdf的不同解决方案
  6. viper4android百度云盘,【图片】打造安卓最强音效,ViPER4Android【西南模范吧】_百度贴吧...
  7. Mysql报错 message from server: Host '61.148.245.96' is not allowed to connect to this MySQL server
  8. python re 简单实例_python的re正则表达式实例代码
  9. linux百分比查看文件,Linux 如何查看内存使用率百分比?
  10. DSP之外部设备连接接口之HPI