亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

QT與javascript交互數據如何實現

發布時間:2021-05-27 10:16:38 來源:億速云 閱讀:531 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關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交互數據如何實現”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

贵南县| 正镶白旗| 镇雄县| 屏南县| 大同县| 舒兰市| 武陟县| 瓮安县| 西充县| 泰宁县| 巢湖市| 阿图什市| 彰化市| 永康市| 麟游县| 故城县| 柘荣县| 勐海县| 延川县| 阿拉善盟| 龙岩市| 神农架林区| 蒲城县| 临城县| 乐亭县| 阿拉善盟| 普洱| 西昌市| 海口市| 建瓯市| 吴川市| 灌南县| 太谷县| 泽普县| 成武县| 乌海市| 营山县| 芜湖县| 江城| 仙桃市| 定州市|