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熟知。QML切换js代码更方便,HTML还要求在内进行js代码。QML可以直接通过id被js访问。HTML标签必须通过document[id]查找出对象才能访问。
然后就是C++与JS的交互,C++与QML的交互,C++通过与JS的交互达到与HTML标签交互。你开发的*ML运行平台的容器可以跟*ML里面的对象/函数进行互调通讯,彼此提供服务又彼此消费对方的服务。你不好做的,我替你扛。你强大的,我就交给你。要什么情(消)报(息),我们私底下幽。
本文只将QML跟基于CEF的两种开发做简单感性上的类比,只为那些只做过QML或只做过CEF,或者两者都没做过的童鞋,想了解对面是什么,或是想知道它们都是做什么的。如果你是两样都做过的,希望能有同感。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章