QtWebkit javascript bridge,无法访问 Qt 对象方法

QtWebkit javascript bridge,Cannot access Qt object methods

本文关键字:访问 Qt 对象 方法 javascript bridge QtWebkit      更新时间:2023-10-16

使用QtWebkit的javascript桥,我创建了一个类,用于将Web框架中的数据与Qt代码的其余部分连接起来。 它识别对象,但不识别其方法。

主窗口.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);
};

应用程序代码:

#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类的函数,你帮帮我谢谢

您是否尝试过在普通(即非插槽功能)上使用Q_INVOKABLE?试试这个

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

然后像从 JavaScript coode 中调用函数一样调用该函数。

通常这种方法对我有用。不过,我从来没有把Q_SLOTQ_INVOKABLE结合起来。