2013-03-20 4 views
0

Я новичок в QT. Я пытаюсь увидеть мост между javascript и Qt Class.javaScriptWindowObjectCleared сигнал не вызывается, пока страница html загружается в qwebview

Что я сделал:

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 не вызывается.

Может кто-нибудь помочь мне, чтобы решить эту проблему? .. Я, должно быть, совершил какую-то глупую ошибку. :(

ответ

0

Убедитесь, что ваш MainWindow: 1) наследует QObject 2) имеет макрос Q_OBJECT 3) имеет слот addJSObject().

Например mainwindow.h:

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

private slots: 
    void addJSObject(); 

}; 

Если это правильно, вы должны быть в состоянии подключиться к addJSObject() без статического QObject :: Connect(). Просто используйте connect(), когда ссылаетесь на это как целевой объект сигнала.

Один из способов просто проверить, что ваша сигнализация работает, чтобы попытаться использовать сигнал QTimer таймаута:

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