亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

QT與javascript交互數(shù)據(jù)的實(shí)現(xiàn)

 更新時(shí)間:2021年05月26日 15:32:42   作者:暴躁的野生猿  
本文主要介紹了QT與javascript交互數(shù)據(jù)的實(shí)現(xiàn),主要包括數(shù)據(jù)從QT流向JS以及數(shù)據(jù)從JS流向QT的幾種方法,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、數(shù)據(jù)從QT流向JS
1、QT調(diào)用JS的函數(shù),JS通過形參獲得QT的值
2、JS調(diào)用QT的函數(shù),QT函數(shù)的返回值進(jìn)入JS
二、數(shù)據(jù)從JS流向QT
1、JS調(diào)用QT的函數(shù),QT通過形參獲得JS的值
2、QT調(diào)用JS的函數(shù),JS函數(shù)的返回值進(jìn)入QT

1、QT向JS傳遞數(shù)組

基本類型可以直接傳遞,例如 int bool string double等

qt向js傳遞數(shù)組,需要把數(shù)組轉(zhuǎn)成QJsonArray,再把QJsonArray轉(zhuǎn)成QString, 這樣js就會(huì)接收到一個(gè)基本類型string,而這個(gè)string在js中直接就是一個(gè)標(biāo)準(zhǔn)的js數(shù)組。

QT代碼示例:調(diào)用js函數(shù),并給這個(gè)js函數(shù)傳遞一個(gè)數(shù)組作為參數(shù)

    //方法1:構(gòu)造QJsonArray,然后轉(zhuǎn)成QString
    QJsonArray ja;
    ja << 3 << 4 << 5;
    QString jpar = QString(QJsonDocument(ja).toJson());
    QString cmd = QString("qtPara(%0)").arg(QString(QJsonDocument(ja).toJson()));
    //方法2:直接把數(shù)組寫成string
//    QString cmd = QString("qtPara([13,14,15])");
 
    //運(yùn)行js函數(shù)
    webView->page()->runJavaScript(cmd);

上面代碼調(diào)用的javascript函數(shù)為:

 function qtPara(numList)
 { 
  alert("js alert: " + numList);//顯示qt傳來的整個(gè)數(shù)組
  alert("js alert[0]: " + numList[0]);//顯示qt傳來數(shù)組第0個(gè)元素
 }

2、JS向QT傳遞數(shù)組

JS如果向QT傳遞數(shù)組,那么QT就要把這個(gè)值轉(zhuǎn)成 QJsonArray

JS還可以向QT傳遞任意JS對象,那么QT要轉(zhuǎn)成QJsonObject

QT端示例代碼:

    QString cmd = QString("jsString()");
 
    webView->page()->runJavaScript(cmd, [](const QVariant &v)
    {
        //情形1:當(dāng)js返回?cái)?shù)字時(shí)
        qDebug() << "qt call js = " << v.toDouble();
        //情形2:當(dāng)js返回string值時(shí)
        qDebug() << "qt call js = " << v.toString();
        //情形3:當(dāng)js返回 js數(shù)組時(shí)        
        QJsonArray ja = v.toJsonArray();
        qDebug() << "j[0] = " << ja.at(0).toDouble();
        //情形4:當(dāng)js返回 js 對象時(shí)        
        QJsonObject jo = v.toJsonObject();
        qDebug() << jo;
    });

上述代碼所調(diào)用的JS端的函數(shù):

// 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傳遞任意類型數(shù)據(jù)

QT端用QVariant類型來接收,然后qDebug這個(gè)值,就能看到這個(gè)JS值是如何被封裝為QVariant的,然后我們就能

例如,JS向QT返回一個(gè)這樣的值,這是一個(gè)JS對象數(shù)組,每個(gè)元素都是一個(gè)Point對象,且這個(gè)Point對象有l(wèi)ng和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))))))

我們發(fā)現(xiàn),

① QT把JS的對象數(shù)組,封裝成了QVariantList, 也即QList<QVariant>,

② 這個(gè)list的每個(gè)成員又都被QT封裝成了QVariantMap, 也即QMap<QString, QVariant>

③ 每個(gè)map中的key都是QString,value都是QVariant,且這個(gè)QVariant是double。

經(jīng)過上述分析步驟,我們就可輕易地解析出JS向QT傳來的任意數(shù)據(jù)了。

到此這篇關(guān)于QT與javascript交互數(shù)據(jù)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)QT與javascript交互 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • layer更改皮膚的實(shí)現(xiàn)方法

    layer更改皮膚的實(shí)現(xiàn)方法

    今天小編就為大家分享一篇layer更改皮膚的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • VSCode Webview中實(shí)現(xiàn)點(diǎn)擊下載圖片的基本流程

    VSCode Webview中實(shí)現(xiàn)點(diǎn)擊下載圖片的基本流程

    這篇文章主要介紹了VSCode Webview中如何實(shí)現(xiàn)點(diǎn)擊下載圖片,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • 詳解JS如何解決大數(shù)據(jù)下滾動(dòng)頁面卡頓問題

    詳解JS如何解決大數(shù)據(jù)下滾動(dòng)頁面卡頓問題

    之前遇到不分頁直接獲取到全部數(shù)據(jù),前端滾動(dòng)查看數(shù)據(jù),頁面就挺卡頓的,所以這篇文章來和大家聊聊如何解決這一問題,感興趣的小伙伴可以了解下
    2023-07-07
  • 最新評論