我是QT的新手。我一直在试图看到javascript和Qt Class之间的桥梁。
我做了什么:
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..";
}
问题:
它编译没有错误,并且qtml文件显示在qwebview中,但是不调用addJSObject回调。
有人可以帮助我解决这个问题吗?我一定做了一些愚蠢的错误。 :(。
答案 0 :(得分: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()));