一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 4513|回复: 4

Qt的Script、Quick、QML的关系与总结

[复制链接]
发表于 2017-6-9 14:47 | 显示全部楼层 |阅读模式
背景
最近在学QML,感觉也不难,就是一直以来接触 Qt 的脚本类的东西的顺序是Script、Quick1、Declarative、Quick2、QML。那么每一个都是干什么的呢,这些东西搞的我有点混乱,所以决定把他们的大概都先弄清楚,以便更好地学习。
历史
先去扒一下它们的历史。
QtScript 从 Qt 4.3 开始引入。
, c/ b4 Z. K2 LQt Quick1 从 Qt 4.7 开始引入。! q$ o- L) T) J, I6 N
Qt Quick1 包含 Qt Declarative 模块、QML。. y7 j  d' t9 Z6 e. a2 w
Qt Quick1.1 从 Qt 4.8 开始引入。9 F# S+ Z* `6 x& j/ j+ B
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 中,但重要性降低了不少。- W/ U& M% J9 D1 d) N- N5 U0 F* O
从 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 必须的扩展。
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 还将继续存在很长的时间。/ o0 h, F5 F( b9 `1 @) o1 ]
在 Qt 5 中 QtScript 被降级; Declarative 模块被2个 QML 模块取代; Quick1 除了支撑旧的 QML 脚本外,几乎没有什么用途了; Quick2 和 QML 在未来的 Qt 版本中会得到越来愈多的重视,在 Qt 5 中 Quick2 添加了很多有意思的功能,还需要继续深入的学习。
那么 QtScript 和 QML 有没有关系呢?
7 J% k  O; {7 R3 k0 l# E7 x. {首先2者没有直接关系,都是脚本。
) ^, y& A; a) V2 I% a5 u0 D* w; L5 ZQtScript 遵从 ECMAScript 的标准  ?4 ?5 i9 p! v+ g* E8 J
QML 是 Qt 自己定义的语法,类似 JSON
. l! s0 S, j5 A# Z1 L/ UQML 设计本意是为了使用 动态语言 编写交互界面
6 {8 B% O' n4 \4 T) aQtScript 设计本意是为了使得 动态语言 业务逻辑部分,当然也可以是部分界面层次的逻辑。
通过写这篇文章,我终于理清了 QtScript, QML, Quick1, Quick2, Declarative 之间的关系。希望看文章的你也清楚了。
" b! _; ]) g4 Y/ C1 @& B
发表于 2017-6-9 19:17 | 显示全部楼层
太难了
回复

使用道具 举报

 楼主| 发表于 2017-6-9 20:41 | 显示全部楼层
jmh690616 发表于 2017-6-9 19:17
/ H) c" _: C0 ^$ K1 E  V太难了

6 B" S9 e; D' p; l! K' I不要太看少自己,其实Qt并没有你想像这么难,好像QML其实就是跟写网页的HTML5一样的写法。6 P) d; H: D: i& H' }# o
回复

使用道具 举报

发表于 2017-6-12 21:35 | 显示全部楼层
我放弃PYQT了,改成大家普遍说比较难的wxPython了。对比发现,wxPython比pyqt简单,QT太乱了。并且用到的语言太多。会导致你学那个语言都学不精。
回复

使用道具 举报

 楼主| 发表于 2017-6-12 22:18 | 显示全部楼层
hotdll 发表于 2017-6-12 21:35
1 c: t" y! A* N1 ?* I6 ]# f( ^; ^/ T我放弃PYQT了,改成大家普遍说比较难的wxPython了。对比发现,wxPython比pyqt简单,QT太乱了。并且用到的语 ...
. q& Y; I8 {  r/ j% c
其实也没多少种语言,很多是调用的。7 i: F) W. v' L1 {2 v# }
Qt 主打是QML 和 C++
, p9 r, u: |# I* UQML也就是html5 一样的用法3 Q% h* x' D- U1 X6 U- ?
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2026-1-12 00:44 , Processed in 0.036654 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表