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());
js的基本数据类型
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交互内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。