Qt WebKitとJavaScriptは相互作用します.

2347 ワード

1.JavaScriptはQt関数を呼び出します.
構造時に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中的定义如下 
 

function showAddress(longjitude,latitude)
{
   var gpsPoint = new BMap.Point(longjitude, latitude);
}
ソースリンク:はいhttp://blog.csdn.net/caoshangpa/article/details/51014690とコメントしています