在Qt项目中,升级Qt版本时难免会遇到从QWebView到QWebEngineView的转换,他们之间的用法也多少有些变化。话不多说,下面是我遇到这个问题时的几个关键部分。
一、Qt调用js
QWebView的方法是
webview->page()->mainFrame()->evaluateJavaScript(cmd);
QWebEnginePage的用法为
webview->page()->runJavaScript(cmd);
二、js调用Qt
1. 在QWebView中实现j方法是先向js注册一个方便js调用的对象,此处为“formExtractor”
webview->page()->mainFrame()->addToJavaScriptWindowObject("formExtractor",this);
然后在js文本中直接调用对象即可
<script type = "text/javascript" >
function leftClickEvt(){
formExtractor.onCLicked();
}
</script>
2. 使用QWebEngineView,需要先为QWebEnginePage添加一个QWebChannel,通过QWebChannel向js注册对象
webview->page()->setWebChannel(new QWebChannel(this));
webview->page()->webChannel()->registerObject(QStringLiteral("formExtractor"), this);
在js文本中要先载入qwebchannel.js,qwebchannel.js要从Qt中拷贝出来放到工程下面。然后再创建QWebChannel把C++传来的对象,在js中起个别名(我是这样理解的)。
<script type="text/javascript" src="./qwebchannel.js"></script>
<script type = "text/javascript" >
new QWebChannel(qt.webChannelTransport, function(channel) {
window.formExtractor = channel.objects.formExtractor;
})
function leftClickEvt(){
formExtractor.onCLicked();
}
</script>