博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt的Script、Quick、QML的关系与总结
阅读量:6620 次
发布时间:2019-06-25

本文共 1804 字,大约阅读时间需要 6 分钟。

背景


近期在学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 能够查看 。

在脚本中能够訪问原有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个project的代码都没有太大的变化。仅仅有一些重构方面的工作,从api文件夹的头文件能够看出,除了移除了 QT_MODULE 宏,差点儿没有不论什么更改。

Qt Quick1 介绍

Qt Quick1 是一个集合,用于在各种移动设备上创建交互界面。

设计的目的是为了是UI设计师和开发者能够更紧密的工作。

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

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

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://cecpo.baihongyu.com/

你可能感兴趣的文章
linux配置网络连接
查看>>
烂泥:KVM利用LVM快照备份与恢复虚拟机
查看>>
ytu 1064: 输入三个字符串,按由小到大的顺序输出(水题,字符串处理)
查看>>
PHP脚本不报错的两点原因
查看>>
Android 使用 Gmail 来发送邮件
查看>>
Canavs arcTo方法的理解
查看>>
SQLite操作(C# )
查看>>
Linux:编译动态库时遇到的错误relocation R_X86_64_32 against `a local symbol'
查看>>
Android 手机设置CMWAP 接入点
查看>>
浅谈项目需求变更管理
查看>>
javascript中关于坐标 大小 的描述
查看>>
Darwin Streaming Server用vs2005编译运行过程
查看>>
HTML5开发的翻页效果实例
查看>>
css 中文字体 unicode 对照表
查看>>
atitit.设计模式(2) -----查表模式/ command 总结
查看>>
JAVA反射机制
查看>>
【编程题目】和为 n 连续正数序列
查看>>
Windows Phone 8 开发环境搭建
查看>>
Android数据存储五种方式总结
查看>>
ASP.NET用HttpListener实现文件断点续传
查看>>