QWebView中交互类接口返回值的问题
为了实现与html的交互,我们需要在加载页面时,向页面注册一个交互对象,这个对象的所有slot函数就可以由前端通过js调用。这里讨论的是这些slot函数的返回值问题。
前面的《QT中使用WebKit中的一些问题》一文中,我通过试验我发现这些slot函数不能返回值。但现在发现,它是可以返回值的。下面是例子:
1. C++端
//头文件
public slots: virtual void loadIniData(); virtual void deliverData(QString datatype, QString json); //datatype是表示类型,在管理类时它可以是增删改查,在编辑类里可以是提交、修改、删除(清空) bool validateUser(QString name, QString pw, QString targetpage);
//cpp文件 bool LoginView::validateUser(QString name, QString pw, QString targetpage) { if(Utility::validateUser(name, pw)) { if(targetpage.compare(Utility::sceManagerName) == 0) Utility::switchPage(Utility::sceManagerName); //进入想定管理 else Utility::switchPage(Utility::scEditNameM); //进入无数据填写 } }
可以看到validateUser函数是一个slot,它返回一个bool量。
2. js端
var json = "user:" + this.user +",password:"+ this.password+ ",target:"+ this.selected; alert(json); //window.secTool.deliverData("", json); var suc = window.secTool.validateUser(this.user, this.password, this.selected); var re = JSON.stringify(suc); if(re == 'false') { document.getElementById("login_re").innerHTML = "用户名或密码错误......"; }
C++注册的对象名是secTool,我们发现它返回的值是一个对象,所以不能简单地用if(suc==false)来判定,需要将其转换为string类型才能判定。
这里使用了JSON.stringify方法,它将一个对象转换为了字符串。
所以,交互类接口函数是可以返回值的,但其他类型的值我还没有试过。