bbqzsl

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,或者两者都没做过的童鞋,想了解对面是什么,或是想知道它们都是做什么的。如果你是两样都做过的,希望能有同感。

相关文章: