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方法,它将一个对象转换为了字符串。

所以,交互类接口函数是可以返回值的,但其他类型的值我还没有试过。