我找到了答案。基本上,在 Qt5.5 中,我正在使用 QtWebView 进入实验领域。类方法在很大程度上没有记录,将来可能会改变。
目前,唯一的技术是消息传递,而不是您可以在QWebView C++ Bridge中使用的本机 C++ 类方法调用。QWebView C++ Bridge 仅适用于 QWebView 小部件,不适用于 QtWebView QML。因此,您使用navigator.qt.postMessage()
API 将这条消息从您的 Javascript 传递到您的 QML,然后 QML 可以调用 C++。为了获得额外的功能,您需要执行几个步骤。这是一个例子:
从 webviews Javascript 调用 C++ 方法
这是在这里写的一点博客:
http://rschroll.github.io/beru/2013/08/21/qtwebview.experimental.html
从示例中可以看出,您必须将这些导入添加到您的 main.qml:
import QtWebKit 3.0
import QtWebKit.experimental 1.0
然后,在您的WebView{}
部分中,您必须添加以下行:
experimental.preferences.navigatorQtObjectEnabled: true
此时,您可以调用navigator.qt.postMessage("call foo in C++");
以向 QML 发送消息,然后您可以在您的WebView{}
部分中获取该消息:
experimental.onMessageReceived: { ...do something here in the QML... }
然后,您的 QML 可以通过以下方式将消息直接传递回 Javascript:
experimental.postMessage("okay, I called foo in C++")
然后在您的 Javascript 中,您可以像这样添加一个事件侦听器:
navigator.qt.onmessage = function(ev) {
$('BODY').prepend(ev.data); // since console.log() is not possible
}
至于如何让你的 QML 调用 C++,这里有一个例子:
https://stackoverflow.com/a/17881019/105539
编辑:在 Qt 5.5 中使用 QtWebView 进行更多实验后,它在以下方面显得相当不稳定。我不建议在 5.5 中使用它——它还没有为黄金时段做好准备。在 Qt 5.5 中,您最好暂时使用 QWebView 小部件,然后在 Qt 的下一个版本(Qt 5.6、5.7?)发布时迁移到QtWebEngine 。
默认情况下,它会为您提供您可能不想要的右键单击上下文菜单。有趣的是,如果您导入实验库,然后在 QML 中设置此属性,则可以将其关闭:experimental.preferences.navigatorQtObjectEnabled: true
.
默认情况下,除非您启用experimental.preferences.navigatorQtObjectEnabled: true
.
当您启用experimental.preferences.navigatorQtObjectEnabled: true
时,如果您在某些 HTML 页面元素上启用滚动条,它们就会消失,复选框和单选按钮看起来非常时髦,并且弹出选择列表框停止工作。
当你双击一个页面时,它会缩放它。