我是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回调。
有人能帮我解决这个问题吗?我一定是犯了什么愚蠢的错误。(。确保你的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()));