一、数据从QT流向JS

1、QT调用JS的函数,JS通过形参获得QT的值

2、JS调用QT的函数,QT函数的返回值进入JS

二、数据从JS流向QT

1、JS调用QT的函数,QT通过形参获得JS的值

2、QT调用JS的函数,JS函数的返回值进入QT

1、QT向JS传递数组

基本类型可以直接传递,例如 int bool string double等

qt向js传递数组,需要把数组转成QJsonArray,再把QJsonArray转成QString, 这样js就会接收到一个基本类型string,而这个string在js中直接就是一个标准的js数组。

QT代码示例:调用js函数,并给这个js函数传递一个数组作为参数

//方法1:构造QJsonArray,然后转成QString

QJsonArray ja;

ja << 3 << 4 << 5;

QString jpar = QString(QJsonDocument(ja).toJson());

QString cmd = QString("qtPara(%0)").arg(QString(QJsonDocument(ja).toJson()));

//方法2:直接把数组写成string

// QString cmd = QString("qtPara([13,14,15])");

//运行js函数

webView->page()->runJavaScript(cmd);

上面代码调用的javascript函数为:

function qtPara(numList)

{

alert("js alert: " + numList);//显示qt传来的整个数组

alert("js alert[0]: " + numList[0]);//显示qt传来数组第0个元素

}

2、JS向QT传递数组

JS如果向QT传递数组,那么QT就要把这个值转成 QJsonArray

JS还可以向QT传递任意JS对象,那么QT要转成QJsonObject

QT端示例代码:

QString cmd = QString("jsString()");

webView->page()->runJavaScript(cmd, [](const QVariant &v)

{

//情形1:当js返回数字时

qDebug() << "qt call js = " << v.toDouble();

//情形2:当js返回string值时

qDebug() << "qt call js = " << v.toString();

//情形3:当js返回 js数组时

QJsonArray ja = v.toJsonArray();

qDebug() << "j[0] = " << ja.at(0).toDouble();

//情形4:当js返回 js 对象时

QJsonObject jo = v.toJsonObject();

qDebug() << jo;

});

上述代码所调用的JS端的函数:

// var jArr = [120.123456789, 22, 33, 44];//js array

// var jObj = {"num":[120.123456789, 22, 33, 44], "name":"Tom"};//json

var jNum = 120.1234567;

function jsString()

{

alert("jsString");

//return jNum ;

//return jArr;

//return jObj;

}

3、JS向QT传递任意类型数据

QT端用QVariant类型来接收,然后qDebug这个值,就能看到这个JS值是如何被封装为QVariant的,然后我们就能

例如,JS向QT返回一个这样的值,这是一个JS对象数组,每个元素都是一个Point对象,且这个Point对象有lng和lat属性值。

path = [new Point(116.387112,39.920977), new Point(116.387112,39.920977)];

QT接收到以后qDebug它,如下:

QVariant(QVariantList,

(QVariant(QVariantMap, QMap(("lat", QVariant(double, 39.921))("lng", QVariant(double, 116.387)))),

QVariant(QVariantMap, QMap(("lat", QVariant(double, 39.921))("lng", QVariant(double, 116.387))))))

我们发现,

① QT把JS的对象数组,封装成了QVariantList, 也即QList,

② 这个list的每个成员又都被QT封装成了QVariantMap, 也即QMap

③ 每个map中的key都是QString,value都是QVariant,且这个QVariant是double。

经过上述分析步骤,我们就可轻易地解析出JS向QT传来的任意数据了。

到此这篇关于QT与javascript交互数据的实现的文章就介绍到这了,更多相关QT与javascript交互 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

qt与js html进行数据传递,QT与javascript交互数据的实现相关推荐

  1. html 连接中写js变量,HTML中传递和引用JavaScript变量

    在HTML中传递和引用JavaScript变量 var foobar; //全局变量声明 function passvar(){ foobar = document.getElementById('t ...

  2. Java抓取网页数据(原网页+Javascript返回数据)

    转载请注明出处! 原文链接:http://blog.csdn.net/zgyulongfei/article/details/7909006 有时候因为种种原因,我们须要採集某个站点的数据,但因为不同 ...

  3. 网页数据抓取 java_Java抓取网页数据(原网页+Javascript返回数据)

    转载请注明出处! 有时候因为种种原因,我们须要採集某个站点的数据,但因为不同站点对数据的显示方式略有不同! 本文就用Java给大家演示怎样抓取站点的数据:(1)抓取原网页数据:(2)抓取网页Javas ...

  4. 微信数据包解析 php,微信交互数据包分析 - 新手入门及其它(软件) - 恩山无线论坛 - Powered by Discuz!...

    本帖最后由 derry 于 2019-3-7 23:30 编辑 微信启动后,主要建立以下连接: 1.      建立tcp长链接 端口号:80.443.8080中的一个(微信重启后会切换端口). 2. ...

  5. Android之一窥究竟Activity间的数据传递以及Intent的用处

    1.Activity与Intent * 1.1何为Intent * 1.2Intent的用武之地 * 1.3Activity间的数据传递 转载请标明出处: http://blog.csdn.net/h ...

  6. Python Qt GUI设计:窗口之间数据传递(拓展篇—5)

    目录 1.单一窗口数据传输 2.多窗口数据传输:调用属性 3.多窗口数据传输:信号与槽 在开发程序时,如果这个程序只有一个窗口,则应该关心这个窗口里面的各个控件之间是如何传递数据的.如果这个程序有多个 ...

  7. QT与JavaScript交互/Qt调用JS脚本

    QT与JavaScript交互/Qt调用JS脚本 简介 QT中调用JS函数 JS中调用QT函数 完整代码 mainwindow.h mainwindow.cpp html.html Qt调用JS脚本 ...

  8. js json数据传递传递、json数据解析

    在js 中,前台数据传递到后台,需要使用JSON.stringify()传递 wx.navigateTo({url:'../textcontent/textcontent?arraylist2=' + ...

  9. 页面url带参数_微信小程序云开发教程微信小程序的JS高级页面间数据传递

    同学们大家好,我是小伊同学,上一节课我们讲解了全局数据的读写方法,那么在页面间同样需要数据交互,今天我们就来学习这部分内容. 在微信小程序中,我们常常需要将数据在页面之间进行传递,比如用户的身份信息, ...

最新文章

  1. 作为一个Linux/Unix程序员有哪些要求
  2. 半监督+标签传播算法
  3. DL之MaskR-CNN:Mask R-CNN算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
  4. AI加持的竖屏沉浸播放新体验
  5. 【LeetCode笔记】62. 不同路径(Java、动态规划)
  6. 跨考计算机报班,考研跨考的经验总结与分享
  7. linux系统查看已连接串口,Linux下串口连接的简单测试
  8. table id=datatable - Requested unknown parameter 'tname' for row 0, column 4. 解决
  9. 使用MEAT在iOS设备上采集取证信息
  10. 8 种 NoSQL 数据库系统对比
  11. 身为码农,为 12306 说两句公道话
  12. java编译程序包不存在_在cmd下编译Java源文件文件出现程序包xxxx不存在
  13. 2019年5月1日起,南京调整社保缴费比例
  14. iOS 7 之Airdrop 分享
  15. 使用VMware安装CentOS
  16. python ipo模式包括什么_什么是IPO?
  17. 《90后程序员职场报告》:平均月薪近20K,字节跳动最受青睐
  18. 笔记本PhotoCaptureStartTimoout
  19. MongoDB初认识
  20. execute 等返回值

热门文章

  1. [翻译]基于ASP.NET的NumericTextBox控件[Carol]
  2. Python窗体操作函数
  3. js地址栏获取参数的方法,解决中文乱码问题,能支持中文参数
  4. Ubuntu,kubuntu与xubuntu的差别 Ubuntu各版本主要差异
  5. ICCV 2021 oral 重构+预测,双管齐下提升视频异常检测性能
  6. 大道至简,仅需4行代码提升多标签分类性能!ICCV21 南大提出Residual Attention
  7. AAAI 2020 | 腾讯优图10篇论文入选,含速算识别、视频识别等主题
  8. IoU-aware的目标检测,显著提高定位精度
  9. 穿墙透视真的来了!MIT华人团队超强动作检测模型,小黑屋照样夜视
  10. OpenVSLAM:日本先进工业科技研究所新开源视觉SLAM框架