Qt WebKit与JavaScript交互

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的评论中




你可能感兴趣的:(Qt WebKit与JavaScript交互)