Qt WebKitとJavaScriptは相互作用します.
2347 ワード
1.JavaScriptはQt関数を呼び出します.
構造時にQWebFrameのaddToJavaScript WindowObject方法でJavascriptに対象参照を提供します.
構造時にQWebFrameのaddToJavaScript WindowObject方法でJavascriptに対象参照を提供します.
QString strMapPath="file:///";
strMapPath+=QCoreApplication::applicationDirPath();
strMapPath+="/map.html";
QUrl url(strMapPath);
ui->webView->load(url);
ui->webView->setContentsMargins(0,0,0,0);//
ui->webView->setTextSizeMultiplier(1);//
connect(ui->webView->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()),this, SLOT(slotPopulateJavaScriptWindowObject()));
void Widget::slotPopulateJavaScriptWindowObject()
{
ui->webView->page()->mainFrame()->addToJavaScriptWindowObject("ReinforcePC", this);
}
这样Javascript就可以利用Qt对象ReinforcePC去调用Qt函数,需要注意的是Javascript中只能调用Qt的公共槽函数,因此必须把要调用的函数声明为public slots 。
2.Qt调用JavaScript函数
QWebFrame 提供了一个evalueJavaScript()方法,可以直接调用JavaScript函数,而且可以在调用时传递参数
void Widget::setCoordinate(QString lon,QString lat) { QWebFrame *webFrame = ui->webView->page()->mainFrame(); QString cmd = QString("showAddress(\"%1\",\"%2\")").arg(lon).arg(lat); webFrame->evaluateJavaScript(cmd); }
showAddress在map.html中的定义如下
ソースリンク:はいhttp://blog.csdn.net/caoshangpa/article/details/51014690とコメントしていますfunction showAddress(longjitude,latitude) { var gpsPoint = new BMap.Point(longjitude, latitude); }