在qwebview中加载html页面时,不会调用javaScriptWindowObjectCleared信号

时间:2013-03-20 14:22:48

标签: qt qt4 qt5

我是QT的新手。我一直在试图看到javascript和Qt Class之间的桥梁。

我做了什么:

1)我有一个按钮和连接点击信号到on_pushButton_clicked,我也有qwebview实例。

在on_pushButton_clicked:

...

QUrl url = QUrl::fromLocalFile("C:\\whoami\\sd\\index.html");


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

  ui->webView->page()->mainFrame()->load(QUrl(url));
....

并在addJSObject中,

void MainWindow::addJSObject()
{
    qDebug () <<"Inside addJSObject";
    ui->webView->page()->mainFrame()->addToJavaScriptWindowObject(QString("mBridge"), m_bridge);
    qDebug () <<"Nooo. I m not invoked..";
}

问题:

它编译没有错误,并且qtml文件显示在qwebview中,但是不调用addJSObject回调。

有人可以帮助我解决这个问题吗?我一定做了一些愚蠢的错误。 :(。

1 个答案:

答案 0 :(得分:0)

确保你的MainWindow:1)继承QObject 2)有Q_OBJECT宏3)有一个插槽addJSObject()。

例如mainwindow.h:

class MainWindow : public QObject
{
  Q_OBJECT
public:
  MainWindow();

private slots:
  void addJSObject();

};

如果这是正确的,你应该能够在没有静态QObject :: connect()的情况下连接到addJSObject()。将此引用为信号目标对象时,只需使用connect()。

检查的一种方法是,您的信令工作是尝试使用QTimer超时信号:

QTimer::singleShot(5000, this, SLOT(addJSObject()));