背景


最近在学QML,感觉也不难,就是一直以来接触 Qt 的脚本类的东西的顺序是Script、Quick1、Declarative、Quick2、QML。那么每一个都是干什么的呢,这些东西搞的我有点混乱,所以决定把他们的大概都先弄清楚,以便更好地学习。

历史


先去扒一下它们的历史。

QtScript 从 Qt 4.3 开始引入。
Qt Quick1 从 Qt 4.7 开始引入。
Qt Quick1 包含 Qt Declarative 模块、QML。
Qt Quick1.1 从 Qt 4.8 开始引入。
Qt Quick2 从 Qt 5 开始引入。

QtScript 介绍


QtScript是基于 ECMAScript 的脚本语言,关于 ECMAScript 可以查看 W3School:ECMAScript

在脚本中可以访问原有C++代码中的QObject类型及其子类的实例,连接信号和槽;也可以创建QObject类型及其子类的实例。

但是QtScript并不能独立运行,必须和C++代码配合才能实现完整的功能。

类似QtPlugins,在QtScript的也可以制作Plugins。QtPlugins为C++开发提供扩展;而QtScript Plugins为script开发提供扩展。

能想到的比较典型的应用是:在QIF中不能再script中很好的访问注册表,那么可以写一个ScriptPlugin使得可以在script中使用QSettings,然后一切就都方便了,还不需要改写QIF的源码。

在 Qt 5 中把 Qt Script 和 Qt Script Tool 2个模块,从模块的列表中消失了,虽然依然保留在了 Qt 5 中,但重要性降低了不少。
从 Qt 5 的安装目录查看,Qt Script 和 Qt Script Tool 依然是以独立dll的形式提供,但通过源码对比可以发现,2个工程的代码都没有太大的变化,只有一些重构方面的工作,从api目录的头文件可以看出,除了移除了 QT_MODULE 宏,几乎没有任何更改。

Qt Quick1 介绍

Qt Quick1 是一个集合,用于在各种移动设备上创建交互界面。设计的目的是为了是UI设计师和开发人员可以更紧密的工作。

其中包含了用户界面元素、一种描述交互界面的语言(QML)、QML语言的Runtime(Qt Declarative 模块)

QML 在语法上遵守 JavaScript 的语法,并进行了 Qt 必须的扩展。

W3School:JavaScript

W3School:Http&CSS

Qt Declarative 模块提供了一个动态框架用来构建动态的交互界面,为 QML 提供运行环境;解决了 C++ 和 QML 的交互问题。

Qt Quick2 介绍

Qt Quick2 提供了5个 Qt模块 作为开发 QML 程序的框架,包括 Qt QML, Qt Quick, Qt Quick Controls, Qt Quick Dialogs, Qt Quick Layouts 共5个模块。相比于 Qt 4.8 时的一个模块,算是最直观的改变了。

从 Qt 5 开始,提供了 qml 程序。这使得 QML 的程序不再必须从 C++ 代码启动,而可以作为一个独立的脚本程序运行。

总结

目前已经是 Qt 5 的时代,但根据之前 Qt 3 的经验, Qt 4 还将继续存在很长的时间。
在 Qt 5 中 QtScript 被降级; Declarative 模块被2个 QML 模块取代; Quick1 除了支撑旧的 QML 脚本外,几乎没有什么用途了; Quick2 和 QML 在未来的 Qt 版本中会得到越来愈多的重视,在 Qt 5 中 Quick2 添加了很多有意思的功能,还需要继续深入的学习。

那么 QtScript 和 QML 有没有关系呢?
首先2者没有直接关系,都是脚本。
QtScript 遵从 ECMAScript 的标准
QML 是 Qt 自己定义的语法,类似 JSON
QML 设计本意是为了使用 动态语言 编写交互界面
QtScript 设计本意是为了使得 动态语言 业务逻辑部分,当然也可以是部分界面层次的逻辑。

通过写这篇文章,我终于理清了 QtScript, QML, Quick1, Quick2, Declarative 之间的关系。希望看文章的你也清楚了。

http://blog.csdn.net/zhgn2/article/details/38471815

Qt的Script、Quick、QML的关系与总结的更多相关文章

  1. Declarative Widgets is a QML plugin that adds Qt Widgets support to QML

     05.04.2018  Nathan Collins  8 comments FacebookTwitterGoogle+LinkedInEmail Declarative Widgets is a ...

  2. Qt Quick QMl学习笔记 之图片浏览器

    Qt Quick模块是编写QML应用程序的标准库.虽然Qt QML模块提供QML引擎和语言基础结构,但Qt Quick模块提供了使用QML创建用户界面所需的所有基本类型.它提供了一个可视画布,包括用于 ...

  3. Qt界面UI之QML初见(学习笔记四)

    拖了大半年,今天终于有更新了...我自己都不好意思,最近太忙了! 今天讲一下:QML语法 一 概述 QML是一种专门用于构建用户界面的编程语言,它允许用户构建高性能,具有流畅特效的可视化应用程序,QM ...

  4. 页面中多个script块之间的关系

     一:函数声明与函数定义表达式在函数调用间的区别 <script type="text/javascript"> doA(); var doA = function(a ...

  5. Qt WebView改造成 QML App

    这是去年的一个项目,虽然研究出来了,解了一时之需,但随后束之高阁.当时Qt的版本是4.8.现在整理如下: 把QT HTML5 APP改造成 QML App 方案 新建一个QML自定义控件,该控件包含Q ...

  6. Qt在线讲座之QML脚本书写规范

    时间:2016年3月1日晚7:30 在线讲座:http://qtdream.com主页处就可以收看直播(详见主页提示) 參与对象:对Qt跨平台开发框架感兴趣的朋友们.当然了,假设你是大牛.也可以旁听一 ...

  7. Qt widget中使用QML自定义电池

    1.效果 2.QML 在资源里新建Mybattery.qml: import QtQuick 2.0 import QtQuick 2.12 Item { id: root property colo ...

  8. Qt中C++与QML交互

    ###main.c部分int main(int argc, char *argv[]){    QString info1 = "xxxxxxxxxxx";    QString ...

  9. 浏览器渲染页面的时候,不同的script块之间的关系

    浏览器渲染页面时,当读到script元素的时候,浏览器中的js引擎会分多个script代码块来读取,不同的script代码出错互不影响,但是由于script中的变量作用域是全局,所以前面代码块声明的变 ...

随机推荐

  1. 百度搜索URL参数 搜索关键字

    http://www.baidu.com/s?wd=关键字 wd(Keyword):查询的关键词: http://www.baidu.com/s?wd=关键字&cl=3 cl(Class):搜 ...

  2. Codeforce 221 div1

    A 只要打个表就能发现,1,6,8,9的所有排列就可以产生0~6的余数了... 所以...走不下去的时候一定要打表... #define rep(i,n) for(int i=0 ; i<(n) ...

  3. ubantu14.04 apache2 支持重写模式

    想要开启thinkphp的重写模式,apache必须.htaccess支持, 其他情况也有需要开启.htaccess支持的. 下面是ubantu开启方法: 0. .htaccess这个文件应该放在与入 ...

  4. c#序列化反序列化工具(json,binary,xml)

    using System; using System.Text; using System.IO; using System.Runtime.Serialization.Formatters.Bina ...

  5. P2P/WSN信任建模与仿真平台

    1.ART Testbed 该平台是基于多代理的信任仿真平台,官网的介绍如下: The Agent Reputation and Trust (ART) Testbed initiative has ...

  6. [React Testing] Conditional className with Shallow Rendering

    Often our components have output that shows differently depending on the props it is given; in this ...

  7. 数据库系统原理及其应用总结---ShinePans

    第一章  数据库概论 1.在数据库管理技术的发展过程中.数据库独立性最高的是"数据库系统"阶段 2.三大经典的数据结构模型是"关系.层次和网状模型" 3.单个用 ...

  8. 【转】 LINQ To SQL 语法及实例大全

    LINQ to SQL语句(1)之Where Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子 ...

  9. 使用VS Code调试TypeScript游戏程序JsTankGame成功!!!

    TypeScript游戏程序JsTankGame不是本人写的,是从CSDN下载的. JsTankGame是用Visual Studio开发的,因此在Visual Studio下调试非常顺畅.本人尝试用 ...

  10. (转)SQL Server 2008怎样编辑200行以上的数据

    刚换SQL Server2008 不久,感觉运行速度.编辑提示都比05版的提升不少,但是在维护考试系统中遇到一个05中没有的问题:05中有“打开表”可以编辑所有数据行,到了08变成了“打开前1000行 ...