无法使用QtWebkit通过javascript访问Qt对象方法

时间:2011-05-12 14:38:47

标签: javascript c++ qt qtwebkit

使用QtWebkit的javascript桥接器,我创建了一个类来将我的Web框架中的数据与我的其他Qt代码进行交互。它识别对象,但没有识别它的方法。

//executed with main window constructor
void MainWindow::initJavascriptInterface(){

    webInterfacer JSInterface;
    QWebFrame *frame = ui->webView->page()->mainFrame();
    frame->addToJavaScriptWindowObject("sender",&JSInterface);

}

该类只有一个名为getInfo()的公共插槽(我知道这个名字很糟糕,但是它用于测试,我尝试使用不同的函数名称,以防碰撞)。

webinterfacer.h

#ifndef WEBINTERFACER_H
#define WEBINTERFACER_H

#include <QObject>

class webInterfacer : public QObject
{

Q_OBJECT

public:
    explicit webInterfacer();
    ~webInterfacer();

public slots:
    void getInfo();

signals:
    //signal to emit when getInfo is called
    void openPopup(QString,QString);
};

#endif // WEBINTERFACER_H

我尝试使用getInfo中的不同内容,即使是空函数,它也永远不会被识别。

在我的HTML标头(jQuery)中:

$(document).ready(function(){
    if(window.sender){
        alert("obj: " + typeof sender); //shows "obj: object"
        alert("getInfo: " + typeof sender.getInfo); //shows "getInfo: undefined"
    }
}

1 个答案:

答案 0 :(得分:2)

webInterFacer JSInterface; 你的webInterfacer对象是一个局部变量。它一旦超出范围即被销毁,即退出函数initJavaScriptInterface();

修复

void MainWindow::initJavascriptInterface(){

webInterfacer* JSInterface = new webInterfacer();
QWebFrame *frame = ui->webView->page()->mainFrame();
frame->addToJavaScriptWindowObject("sender",JSInterface);

}