纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

QT与javascript交互 QT与javascript交互数据的实现

暴躁的野生猿   2021-05-26 我要评论
想了解QT与javascript交互数据的实现的相关内容吗暴躁的野生猿在本文为您仔细讲解QT与javascript交互 的相关知识和一些Code实例欢迎阅读和指正我们先划重点: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都是QStringvalue都是QVariant且这个QVariant是double。

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


相关文章

猜您喜欢

网友评论

Copyright 2020 www.Videogametimes.com 【视游时光】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式