qtwebengineprocess有人跑成功过么

下次自动登录
现在的位置:
自从Qt2007年第一次引入webkit以来,web技术已经发生了很大的变化。从只占很小的市场份额开始到现在,webit已经成为最广泛使用的web引擎。qt webkit是除了苹果之外做的比较好的,很多项目和公司也逐渐加入到这个项目开发中来。
    ----
chromium项目在其中发挥了很重要的作用,逐渐成了webkit最大的贡献者(仅次于苹果和qt,排第三)。然而,不同的公司在开源项目上的合作困难重重,所以在今年春天,google决定离开webkit,转而开发自己的webkit分支,名字叫blink。
自从blink被真正集成到chromium中,webkit的发展就有了两个不同的分支,并且这两个版本的代码迅速分开了。基于这个原因,Qt的webkit团队需要对chromium和webkit这个两个分支进行详细的调查,决定在未来使用哪一个分支,以便给Qt的用户提供更好的web引擎。
经过一段时间对两个分支的调查研究,我们最终决定使用chromium的webkit。原因如下:
1 chromium是跨平台的,它的浏览器已经在许多主要的桌面平台和安卓系统上运行。而这一点webkit是不行的,我们必须花费很大的精力开发去支持所有的操作系统
2 chromium有好多现成可用的功能,而这些可能我们要在webkit上花很大的精力开发。比如跨平台,比如多媒体和HTML5的支持
3 由于chromium跨平台,我们就可以把更多的精力放在提供更容易使用的API,和Qt无缝集成。
4 chromium有严格的质量控制,可以节省很多的测试精力,使我们能够提供一个更稳定质量更好的web引擎
5 相比较webkit,chromium可以和widget,Qt quick更好的无缝集成
chromium是目前最具活力和发展最快的移动浏览器,从战略发展的角度,我们决定使用chromium做web引擎。根据上面的事实,跟现在的qt webkit比起来,我们一定会提供一个更好的web引擎。同时,Qt集成了一流的浏览器引擎,一定会创建强大的产品,特别是在嵌入式设备上提供良好的UI性能体验。
基于稳定性和安全性的考虑,chromium中对web页面的渲染是在不同的进程中。所以,我们暂时无法提供某些API,比如QWebElement API。由于QObject和web页面的通信是异步的,所以也必须修改QObject。这些我们正在修改。
那么,这些改变对webkit的用户意味着什么呢?
首先不用担心,大多数情况下,应用程序中的qt webkit运行良好,并且在未来的一段时间都会如此。Qt5.2版本发布后,我们的精力会主要放在新的Qt webEngine上。所以呢,如果想使用HTML5的新特性,建议把应用程序或设备迁移到我们稍后发布的新的Qt webEngine上。
我们会尽最大的努力实现Qt webkit到Qt webEngine的无缝移植。对于web view,我们会提供接近100%的兼容性。对于基础的web view API,在新的Qt webEngine中代码是完全兼容的。如果使用了QObject bridge或是QWebElement,建议稍等一段时间再移植。在Qt webEngine的第一个版本中,可能不会提供这样的API。
Qt webkit不再开发了,现有的版本可以继续使用。对于商业版本的用户,digia一定会提供维护帮助。
现在正在进行的工作是能够尽快提供一个新的Qt webEngine的技术预览。目标是和Qt5.2一起发布。完全支持的版本要到明年春天和Qt5.3一起发布。第一个发布版本支持windows,mac OS x,linux和嵌入式linux.
【上篇】【下篇】
您可能还会对这些文章感兴趣!
百度站内搜索
同分类最新文章t Webengine Widget常见问题Author: kagulaLastUpdate: Environment: [1]Qt5.4、Qt5.5 [2]Visual studio 2013 Update5 [3]QT Plugin 1.2.4注意: [1]发现和中文输入法有兼容性问题,感觉需要修改render_widget_host_view_qt_delegate_widget.cpp文件来解决。 [2]若碰到Cannot open include file: 'QtWebEngineWidgets'的问题 则把“C:\Qt\5.4\msvc2013\include\QtWebEngineWidgets”加入到头文件搜索路径中。 添加下面两个lib文件的链接。 Qt5WebEngined.lib Qt5WebEngineWidgetsd.lib 这里假设你用的是Qt5.4。 [3]最简单的调用“Webegine”的示例代码段如下:#include &QtWebEngineWidgets&#include &QSizePolicy&Erp2013::Erp2013(QWidget *parent): QMainWindow(parent){ui.setupUi(this);view = new QWebEngineView(this);view-&load(QUrl(""));//setCentralWidget(view);//view-&setSizePolicy(QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Expanding);ui.verticalLayout-&addWidget(view);}
[4]html/js如何同C++代码交互,参考资料[4]
但是必须注意以下几点事项:
假设我把index.html重命名为index2.html,"qwebchannel.js"文件放在了D:/nginx-1.8.0/html/目录下面。
如果找不到“qwebchannel.js”文件可以从下面地址下载:http://code.qt.io/cgit/qt/qtwebchannel.git/tree/src/webchannel/qwebchannel.js
[4-2]修改standalone例子main.cpp的"fromLocalFile"那行代码为下面的样子。
QUrl url = QUrl::fromLocalFile("D:/nginx-1.8.0/html/index2.html");
[4-3]下面这段代码是Qt调用系统默认浏览器打开上面的超级链接
QUrl url = QUrl::fromLocalFile("D:/nginx-1.8.0/html/index2.html");
url.setQuery(QStringLiteral("webChannelBaseUrl=") + server.serverUrl().toString());//奇怪这行代码没起作用
QDesktopServices::openUrl(url);
[4-4]程序跑起来后,在Web浏览器中,你会发现“webChannelBaseUrl”参数没有正确传递。
你需要把下面的字符串在浏览器中再打一次:
"file:///D:/nginx-1.8.0/html/index2.html?webChannelBaseUrl=ws://127.0.0.1:12345"
[4-5]现在你浏览器中的页面应该和你standalone程序相互通讯了。
[4-6]查看js代码,我把QWebChannel注册时的“dialog”改为“Erp2013”,下面html中的代码
window.dialog = channel.objects.
相应改为了如下:
window.Erp2013 = channel.objects.Erp2013;
类似,把html中dialog名改为了Erp2013.
[5]如何调用js函数?
QString code = QString::fromLocal8Bit("alert('调用Java function的测试')");
view-&page()-&runJavaScript(code);参考资料[1]《Qt WebEngine Widgets》 [2]《Qt下载》 [3]《Qt WebEngine Widgets C++ Classes》 [4]《standalone例子》QtWebEngine与bridge机制 & suninf

我要回帖

更多关于 qt5.7 webengine模块 的文章

 

随机推荐