1.JavaScript调用Qt函数
在构造时通过QWebFrame的addToJavaScriptWindowObject方法向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中的定义如下
function showAddress(longjitude,latitude) { var gpsPoint = new BMap.Point(longjitude, latitude); }源码链接:在http://blog.csdn.net/caoshangpa/article/details/51014690的评论中