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

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值