qt和js相互调用(QT与javascript交互数据的实现)
qt和js相互调用
QT与javascript交互数据的实现一、数据从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<QVariant>,
② 这个list的每个成员又都被QT封装成了QVariantMap, 也即QMap<QString, QVariant>
③ 每个map中的key都是QString,value都是QVariant,且这个QVariant是double。
经过上述分析步骤,我们就可轻易地解析出JS向QT传来的任意数据了。
到此这篇关于QT与javascript交互数据的实现的文章就介绍到这了,更多相关QT与javascript交互 内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
- pyqt无边框窗体添加控件(PyQt弹出式对话框的常用方法及标准按钮类型)
- pyqt5数据模型(PyQt5实现简单数据标注工具)
- pyqt5代码实例(pyqt5实现登录界面的模板)
- pythonqt入门教程(使用python实现mqtt的发布和订阅)
- python简单代码画图(python+pyqt5实现图片批量缩放工具)
- pyqt5界面绘图(PyQt5的PyQtGraph实践系列3之实时数据更新绘制图形)
- pyqt复选框样式(基于PyQt4和PySide实现输入对话框效果)
- python用pyqt5制作登录界面(python3+pyqt5+itchat微信定时发送消息的方法)
- pyqt5信号槽编辑器(浅谈pyqt5中信号与槽的认识)
- pyqt5怎么在pycharm中安装(pycharm+PyQt5+python最新开发环境配置踩坑)
- pyqt5 登录界面(pyqt5利用pyqtDesigner实现登录界面)
- pyqt5对话框(Pyqt5如何让QMessageBox按钮显示中文示例代码)
- python获取股票每天k线(使用PyQtGraph绘制精美的股票行情K线图的示例代码)
- python 串口图形化(python使用MQTT给硬件传输图片的实现方法)
- linux怎样查qt版本(Linux QT Kit丢失及Version为空问题解决方案)
- pyqt5加载chrome浏览器(PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例)
- 双十二(双十二和双十一哪个划算)
- 佛肚竹盆景的养护之道(佛肚竹盆景的养护之道)
- 包水饺(包水饺手法怎么包视频)
- 越南河粉(越南河粉来自哪里)
- 按这几方面养护佛肚竹盆景,保证枝叶繁茂,造型优美(按这几方面养护佛肚竹盆景)
- 冰岛旅游攻略(冰岛旅游攻略及花费八日游)
热门推荐
- python标准库操作键盘(Python中捕获键盘的方式详解)
- python如何抓取公众号文章(python爬取微信公众号文章的方法)
- docker主机路径与容器路径(Docker容器没有权限写入宿主机目录的解决方案)
- tornado异步编程(Tornado Web服务器中处理空白字符的解决方案)
- sql server中cxpacket等待
- django中filter的参数(详解django2中关于时间处理策略)
- TFS源代码管理
- sql join速度慢(SQL Server 使用join all优化 or 查询速度)
- ASP.NET生成静态页面的方法
- 使用canvas画个正方形(canvas绘制树形结构可视图形的实现)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9