发布于2021-05-30 12:56 阅读(1584) 评论(0) 点赞(5) 收藏(1)
基本类型可以直接传递,例如 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个元素
- }
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;
- }
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<QVariant>,
② 这个list的每个成员又都被QT封装成了QVariantMap, 也即QMap<QString, QVariant>
③ 每个map中的key都是QString,value都是QVariant,且这个QVariant是double。
经过上述分析步骤,我们就可轻易地解析出JS向QT传来的任意数据了。
原文链接:https://blog.csdn.net/qq_31073871/article/details/117221539
作者:Jjxj
链接:http://www.qianduanheidong.com/blog/article/116129/b8b9c10a4d9d5ef7f9fe/
来源:前端黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 前端黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-3
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!