2012-06-12 70 views
0

使用QtWebkit的javascript橋樑,我創建了一個類來將我的web框架中的數據與其餘的Qt代碼進行接口。它承認對象,但沒有其方法。QtWebkit javascript bridge,無法訪問Qt對象方法

mainwindow.cpp代碼:

#include "app.h" 
MainWindow::MainWindow(QWidget *parent) : QWebView(parent) 
{ 
    happ = new app(this); 
    m_network = new QNetworkAccessManager(this); 
    page()->setNetworkAccessManager(m_network); 



    QFile file("E://qt//test.happ//index.html"); 
    file.open(QIODevice::ReadOnly | QIODevice::Text); 
    QTextStream in(&file); 
    QString htmlContent = in.readAll(); 


    addJSObject(); 
    QObject::connect(page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()),this, SLOT(addJSObject())); 

    setHtml(htmlContent); 
} 

void MainWindow::addJSObject() 
{ 
    page()->mainFrame()->addToJavaScriptWindowObject(QString("happ"), happ); 
}; 

app.h代碼:

#include <QObject> 


class app:public QObject 
{ 
public: 
    app(QObject *parent); 
public slots: 
     void os_foo(); 

signals: 
     void win_bar(); 

}; 

的javascript:

function a(){ 
    if(window.happ){ 
     alert("obj: " + typeof happ);   //shows "obj: object" 
     alert("os_foo: " + typeof happ.os_foo); //shows "os_foo: undefined" 
    } 

} 

JavaScript不能調用應用程序類的功能,你幫助我謝謝

回答

0

您是否嘗試在正常(即非插槽功能)上使用Q_INVOKABLE?試試這個

class app:public QObject 
{ 
    public: 
    app(QObject *parent); 
    //public slots: 
    Q_INVOKABLE void os_foo(); 

    signals: 
    void win_bar(); 
}; 

然後從你的JavaScript代碼中調用函數。

通常這種方法適用於我。不過,我從未合併過Q_SLOTQ_INVOKABLE