0

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

我做了什么:

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..";
}

问题:

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

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

4

1 回答 1

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()));
于 2013-03-22T06:30:54.927 回答