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

問題:

エラーなくコンパイルされ、qwebview に html ファイルが表示されますが、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() を使用してください。

シグナリングが機能することを確認する 1 つの方法は、QTimer タイムアウト シグナルを使用することです。

QTimer::singleShot(5000, this, SLOT(addJSObject()));
于 2013-03-22T06:30:54.927 に答える