QtWebkit本地C++与JavaScript数据对接(映射)

来源:互联网 发布:《数据挖掘》 编辑:程序博客网 时间:2024/05/21 18:38

QtWebkit本地C++与JavaScript数据对接

QtWebKitBridge已经实现了本地C++与JavaScript数据对接,这些对接对程序员来可以说是透明的,转换隐式的。它巧妙的利用的Qt的万能类型QVariant


数据类型对接表,另外QTimeQDate也会与javascript的时间日期进行自动转换。

java类型

Qt C++ 类型

javaType

QVariant

javaArray

QVariantList

JsonObject

QVariantMap

JsonObjectArray

QVariantList+QvariantMap

注:详细也参考http://doc.qt.nokia.com/4.7-snapshot/qtwebkit-bridge.html

一般数据的对接

Javascript调用示例


varvol = '32';

setVolume(vol);

Qt&&c++对接示例


//利用隐式转换bool setVolume(int vol){        //使用隐式转换的整形,如果不能转换将默认转换成0        //所以0是正常值或非法值,如果关心数据的合法性可以使用以下面的方法解决        return doSomeThing(vol);}//使用更安全的机制bool setVolume(const QVariant & vol){        //判断万能数据的合法性,是否为int        if(vol.canConvert(QVariant::Int))        {                //如果是合法的int 将时行转换;                int n = vol.toInt();                return doSomeThing(n);        }        else        {                return false;        }}




Json 数据的对接

Javascript调用示例,处理返回的Json对象数组


var files = getFileAll();var i;for(i = 0; i < files.length; i++){          alert("name:"+files[i].name+" type:"+files[i].type+" size:"+files[i].size);}


Qt&&c++对接示例,把数据用QVariantMap封成Json对象,放入数组返回

QVariantList FileSys::list(){        QVariantList list;        QFileInfoList filelist;        qDebug()<<"=====>filepath:"<<d->path();        filelist = d->entryInfoList(QDir::NoDotAndDotDot|QDir::Dirs|QDir::Files);        //开始对数据进行逐个封装        foreach(const QFileInfo& file,filelist)        {                //封装成MapJSon 对接                QVariantMap map;                map["name"]=file.fileName();//字符串型                map["type"]=file.isDir();//bool                 map["size"]=file.size();//整型                //将数据放入列表中                list<<map;        }        //返回数据,对接层会将其转换为JSON格式        return list;}
原创粉丝点击