0

QtWebkit の JavaScript ブリッジを使用して、Web フレーム内のデータを 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 で app クラスの関数を呼び出せません、助けてください ありがとう

4

1 に答える 1

0

Q_INVOKABLE通常の(つまり、非スロット機能)で使用してみましたか?これを試して

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

   signals:
    void win_bar();
};

次に、JavaScript コードからそのまま関数を呼び出します。

通常、そのアプローチは私にとってはうまくいきます。と を組み合わせたことはQ_SLOTありませんQ_INVOKABLE

于 2012-08-28T01:35:06.490 に答える