【问题标题】:javaScriptWindowObjectCleared signal is not invoked while html page loaded in qwebview在 qwebview 中加载 html 页面时未调用 javaScriptWindowObjectCleared 信号
【发布时间】:2013-03-20 14:22:48
【问题描述】:

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

问题:

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

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

【问题讨论】:

    标签: qt qt4 qt5


    【解决方案1】:

    确保您的 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()));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多