Javascript 如何使用qmlqtwebview调用C++;?
在Qt5.5中,使用他们提供的,它使用了不同于的东西。相反,它使用QML和a。当您查看Javascript的Javascript 如何使用qmlqtwebview调用C++;?,javascript,c++,qt,qwebview,qtwebview,Javascript,C++,Qt,Qwebview,Qtwebview,在Qt5.5中,使用他们提供的,它使用了不同于的东西。相反,它使用QML和a。当您查看Javascript的navigator.appVersion时,它让您知道QWebView加载了一个定制的AppleWebKit/538.1(与Qt5.5一起提供),而QtWebView(注意区别)加载了本机核心操作系统AppleWebKit/601.1.56。这一点得到了证实,因为当我在OSX(El Capitan版本)上加载Safari时,它会显示601.1.56 问题是,我的JavaScript函数如何
navigator.appVersion
时,它让您知道QWebView加载了一个定制的AppleWebKit/538.1(与Qt5.5一起提供),而QtWebView(注意区别)加载了本机核心操作系统AppleWebKit/601.1.56。这一点得到了证实,因为当我在OSX(El Capitan版本)上加载Safari时,它会显示601.1.56
问题是,我的JavaScript函数如何在MixBueld调用后端的C++函数来做更强大的东西?当我使用QWebVIEW控件时,我可以使用让我注入DOM的C++对象,因此可以调用我的C++代码。我没有看到任何关于如何使用QtWebView的基于QML的Minibrowser示例实现这一点的技术文档。技术是什么
编辑:哦,澄清一下,我不是通过网络服务器用这个调用远程网页。我只是通过文件://调用东西。换句话说,我正在使用丰富的webkit界面为我提供一个超级强大的GUI,它远远超出了Qt小部件和QML所能为我提供的功能。我找到了答案。基本上,在Qt5.5中,我正在使用QtWebView进入实验领域。类方法基本上没有文档记录,将来可能会更改 <>现在,唯一的技术是消息传递,而不是像您可以在其中使用的本机C++类方法调用。QWebVIEW C++桥只与QWebVIEW小部件工作,而不是QtWebVIEW QML。因此,您可以通过代码从>代码>导航器.qt .PasMeMeAGE()/<代码> API从您的JavaScript到QML,然后QML可以调用C++。为了获得额外的功能,您需要执行几个步骤。下面是一个例子: 这里有一点博客: 从示例中可以看出,您必须将这些导入添加到main.qml中:
import QtWebKit 3.0
import QtWebKit.experimental 1.0
然后,在WebView{}
部分,您必须添加以下行:
experimental.preferences.navigatorQtObjectEnabled: true
此时,您可以调用navigator.qt.postMessage(“在C++中调用foo”)
向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++,这里有个例子:
编辑:在Qt5.5中使用QtWebView进行了更多实验后,它在以下方面显得相当脆弱我不建议在5.5中使用它——它还没有准备好进入黄金时段。在Qt5.5中,最好现在使用QWebView小部件,然后迁移到下一个Qt版本(Qt5.6、5.7?)时使用
- 默认情况下,它会为您提供可能不需要的右键单击上下文菜单。有趣的是,如果导入实验库,然后在QML:
中设置此属性,则可以将其关闭experimental.preferences.navigatorQtObjectEnabled:true
- 默认情况下,除非启用
,否则HTML5 postMessage()API(HTML5自带的API)似乎不起作用experimental.preferences.navigatorQtObjectEnabled:true
- 启用
时,如果在某些HTML页面元素上启用滚动条,滚动条将消失,复选框和单选按钮看起来非常时髦,并且弹出式选择列表框停止工作experimental.preferences.navigatorQtObjectEnabled:true
- 双击页面时,它会将其缩放
- 我找到了答案。基本上,在Qt5.5中,我正在使用QtWebView进入实验领域。类方法基本上没有文档记录,将来可能会更改
<>现在,唯一的技术是消息传递,而不是像您可以在其中使用的本机C++类方法调用。QWebVIEW C++桥只与QWebVIEW小部件工作,而不是QtWebVIEW QML。因此,您可以通过代码从>代码>导航器.qt .PasMeMeAGE()/<代码> API从您的JavaScript到QML,然后QML可以调用C++。为了获得额外的功能,您需要执行几个步骤。下面是一个例子:
这里有一点博客:
从示例中可以看出,您必须将这些导入添加到main.qml中:
import QtWebKit 3.0
import QtWebKit.experimental 1.0
然后,在WebView{}
部分,您必须添加以下行:
experimental.preferences.navigatorQtObjectEnabled: true
此时,您可以调用navigator.qt.postMessage(“在C++中调用foo”)
向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++,这里有个例子:
编辑:在Qt5.5中使用QtWebView进行了更多实验后,它在以下方面显得相当脆弱我不建议在5.5中使用它——它还没有准备好进入黄金时段。在Qt5.5中,最好现在使用QWebView小部件,然后迁移到下一个Qt版本(Qt5.6、5.7?)时使用
- 默认情况下,它会为您提供可能不需要的右键单击上下文菜单。有趣的是,如果导入实验库,然后在QML:
中设置此属性,则可以将其关闭experimental.preferences.navigatorQtObjectEnabled:true
- 默认情况下,除非启用
,否则HTML5 postMessage()API(HTML5自带的API)似乎不起作用experimental.preferences.navigatorQtObjectEnabled:true
- 启用
时,如果在某些HTML页面元素上启用滚动条,滚动条将消失,复选框和单选按钮看起来非常时髦,并且弹出式选择列表框停止工作experimental.preferences.navigatorQtObjectEnabled:true
- 当你双击一个页面时,它会自动关闭