CEF 与 QML 类比
Qt平台+QML(+QtQuick)+JS = CEF平台+HTML5(+JQueryUI)+JS
|
运行平台(容器): |
QT |
CEF |
|
容器widgets: |
QtWidgets |
cef-views |
|
语言: |
QML |
HTML5 |
|
编程(UI)库: |
QtQuick |
JQuery(UI) |
|
JS引擎: |
QQmlEngine |
V8Engine |
|
OpenGL渲染 |
支持 |
支持 |
1. 运行平台,或者说运行的容器。qml文档依赖qt应用程序运行,html文档依赖cef浏览器运行一个道理。为什么是cef,cef开源,qt有社区开源分支,两者都跨平台。
平台层都使用c++,同样支持java,c#,python,这里就除去不讨论。
两者都可以通过js引擎上下文,跟js,*ml语言标签交互。
QT:QQmlContext跟 js , QML
CEF: CefV8Context跟 js, HTML5
2. 容器widgets
运行平台同样可以进行*ML外的native界面开发。Qt可以使用传统的QtWidgets对平台容器窗口开发界面,CEF也可以使用各种views开发界面。可以这样看,CefBrowser是一个特殊的view,专门运行html。而qml界面也必须加载到一个传统的QWidget上运行。
2.1 后台运行*ml
QML不一定要有界面元素,没有界面的QML可以不加载到QWidget上同样可以执行。CEF可以使用off-screen的CefBrowser执行HTML,如同在后台进行一样。
2.2 Layered窗口渲染
CEF可以使用off-screen的CefBrowser进行Layered窗口渲染,QWidget 本身就支持背景透明以及半透明。
3. *ML语言
两种语言的标签都是脚本引擎上下文的一个对象,通过属性进行访问。可以混合js。不同的是,QML可以定义新的类型,HTML不可以定义新的标签,但是可以通过js的function定义新的对象。所有原生对象以及特性,都要脚本引擎原生支持。这个好理解,同宗v8的node.js添加许多原生对象,你也可以扩展v8为你自己的CEF扩展原生对象。
4. 编程(UI)库:
*ML开发界面,功能所使用到的库的集合体。QML必须使用QtQuick模组。HTML5也有强大的JQuery,包含界面JQueryUI。
5. JS引擎
QQmlEngine就是一个带JS血统的混血新生代,是JS血缘与Qt皇室的QML计划的结晶体。*ML两种语言都可以混合JS语言,声明/定义/访问/调用js变量/对象/函数,也可以导入外部js脚本文档,QML只要import “relative/path/to/js” as objname,HTML熟知<script src=”url/to/js” />。QML切换js代码更方便,HTML还要求在<script></script>内进行js代码。QML可以直接通过id被js访问。HTML标签必须通过document[id]查找出对象才能访问。
然后就是C++与JS的交互,C++与QML的交互,C++通过与JS的交互达到与HTML标签交互。你开发的*ML运行平台的容器可以跟*ML里面的对象/函数进行互调通讯,彼此提供服务又彼此消费对方的服务。你不好做的,我替你扛。你强大的,我就交给你。要什么情(消)报(息),我们私底下幽。
本文只将QML跟基于CEF的两种开发做简单感性上的类比,只为那些只做过QML或只做过CEF,或者两者都没做过的童鞋,想了解对面是什么,或是想知道它们都是做什么的。如果你是两样都做过的,希望能有同感。
CEF 与 QML 类比的更多相关文章
- QML的渲染方式相较于之前的版本也有了重大的更新(CPU线程负责绘制,GPU线程负责渲染),还有好多经常评论 good
作者:qyvlik链接:http://www.zhihu.com/question/38867614/answer/78583440来源:知乎著作权归作者所有,转载请联系作者获得授权. 做UI啊.如果 ...
- 漫谈QML
漫谈 QML/Qt Quick QML是从Qt 4.7开始引入的,QML是一种声明语言,使得可以像设计师思考的一样编码,并且Qt Quick元素就是应用程序的编译单元,每一帧的故事板被声明为元素树中的 ...
- QML vs WEB
UI领域, 如果是桌面应用,QML可以更快速.如果是手机UI,H5绝对占优. 移动设备已经为各行业的HMI的响应性和用户友好性设定了标准.汽车,医疗设备,工业自动化系统和消费电子产品制造商现在希望为其 ...
- 设计模式(八): 从“小弟”中来类比"外观模式"(Facade Pattern)
在此先容我拿“小弟”这个词来扯一下淡.什么是小弟呢,所谓小弟就是可以帮你做一些琐碎的事情,在此我们就拿“小弟”来类比“外观模式”.在上面一篇博文我们完整的介绍了“适配器模式”,接下来我们将要在这篇博客 ...
- QML 从无到有 3 (自动更新)
新的需求出来啦,需要自动更新功能,不怕程序升级了. 自动更新,QML不好写,需要c++来辅助,这里就涉及QML中调用c++功能(这里就不写了,百度一下,很多). 思路:获取版本>下载程序> ...
- QML 从无到有 2 (移动适配)
随着项目深入,需要移植到安卓上,问题来了,QML安卓适配! 幸好PC端程序和手机屏幕长宽比例相似.虽然单位像素,尺寸不同,通过比例缩放,可以实现组件PC和安卓通用代码. 第一步:定义全局的转换函数(3 ...
- QML 从无到有 (基础)
小公司,没办法,什么都得自己亲自来. 服务端是MVC,现在需要可PC客户端和移动APP. 考虑到网页应用有很多界面框架,可以做出很漂亮的界面来,就尝试着使用nwjs来实现,可是在使用了2天的nwjs后 ...
- qt添加cef库嵌入web [转]
qt cef嵌入web 原文http://blog.sina.com.cn/s/blog_9e59cf590102vnfc.html 最近项目需要,研究了下libcef库. Cef(Chromium ...
- QML杂记
1.QML编写可视化元素,运行后程序窗口上无显示.检查电脑的显卡是否支持OpenGL,如果支持请更新显卡驱动. 2.加载图片显示QML Image: Cannot open.解决在qml.qrc右击添 ...
随机推荐
- 外媒评Mate 10 Pro:智慧拍照惊人,续航能力卓越
说到近期的热门机型,华为Mate 10 Pro绝对算是被人们谈论最多的一个,其可以算是首款搭载移动AI芯片的顶级旗舰机型,而且AI技术在这部手机上拥有多项实际的应用,带来的体验非传统智能手机可比. 由 ...
- 2020年ubuntu1804安装nginx最新稳定版1.16详细教程笔记
第一次使用nginx是2007年,当时主流还是apache.nginx横空出世,在web2.0的推动下,迅速崛起.眼下已是绝对的主流了. 当时,还有一个轻量级的lighttpd,是德国人写,刚开始还并 ...
- 商汤提出解偶检测中分类和定位分支的新方法TSD,COCO 51.2mAP | CVPR 2020
目前很多研究表明目标检测中的分类分支和定位分支存在较大的偏差,论文从sibling head改造入手,跳出常规的优化方向,提出TSD方法解决混合任务带来的内在冲突,从主干的proposal中学习不同的 ...
- mysql-case..when知识点总结
case...when..有两种语法: 第一种: case case_value when when_value then statement_list [when when_value the ...
- Java实现通过反射获取指定类的所有信息
package com.ljy; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.l ...
- MAC使用vagrant搭建开发环境
公司的开发环境是这样的: Windows主机通过虚拟机安装CentOS.平时在Windows下编辑代码,然后跑到虚拟机里编译. 我自己有台MAC,本来准备直接在MAC上装开发环境的.基于以下两个原因放 ...
- wmic 内网使用
先决条件: 1.远程服务器启动Windows Management Instrumentation服务,开放TCP135端口,防火墙放开对此端口的流量(默认放开): 2.远程服务器的本地安全策略的“网 ...
- Spring Boot 集成 Flyway 实现数据库版本控制
在项目迭代开发中,难免会有更新数据库 Schema 的情况,比如添加新表.在表中增加字段或者删除字段等,那么当我对数据库进行一系列操作后,如何快速地在其他同事的电脑上同步?如何在测试/生产服务器上快速 ...
- dp cf 20190613
A. Boredom 这个题目不难,但是我做的还比较复杂,不过还是很开心,至少做出来了,开始因为爆int了还wa了一发,搞得我以为自己做错了 #include <cstdio> #incl ...
- Linux时间的相关的操作
时间(修改时区,修改时间,同步网络时间) 查看当前系统时间 date 修改时区 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 修改当前系统时间 ...