找回密码
 立即注册
收起左侧

Qt中Script、Quick、QML关系总结【转载】

5
回复
8537
查看
[复制链接]
累计签到:597 天
连续签到:1 天
来源: 转载 2014-11-21 11:40:31 显示全部楼层 |阅读模式

马上注册,查看详细内容!注册请先查看:注册须知

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 shasidaran 于 2014-11-21 11:41 编辑

      
        学习Qt已经有一段时间了,看到很多网友在qt下开发的界面十分华丽,羡慕不已,现着手于学习QML,但一上来就被一些新名词搞得很混乱,所以决定把他们的大概都先弄清楚,以便更好地学习。后来看到下面zhaogn的博文和大家分享下。

        另: qss(即qt style sheet),是用来给Qt Widgets部件设置样式的(都有一个setStyleSheet())
             QML是Qt Quick界面开发语言

原文:Qt 的Script、Quick、QML的关系与总结
作者:zhgn


历史


        先去扒一下它们的历史。

       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 Qucik1介绍


        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 设计本意是为了使得 动态语言 业务逻辑部分,当然也可以是部分界面层次的逻辑。



回复

使用道具 举报

累计签到:1371 天
连续签到:2 天
2014-12-24 23:45:37 显示全部楼层
挺好的说明,让初学者有个比较清楚的认识。要是可以再具体介绍一下就更好了。
回复 支持 反对

使用道具 举报

累计签到:256 天
连续签到:1 天
2015-4-23 11:47:52 显示全部楼层
最近也看了很多关于QML的说法 但是到底我还是没看懂 有没有相关的例子什么的或者给一段代码说明一下
回复 支持 反对

使用道具 举报

累计签到:3 天
连续签到:1 天
2016-3-3 21:56:41 显示全部楼层
学习了:D:D
回复 支持 反对

使用道具 举报

累计签到:43 天
连续签到:1 天
2016-3-6 10:34:51 显示全部楼层
学习了。。。。。。。。。。。。。
回复 支持 反对

使用道具 举报

累计签到:97 天
连续签到:1 天
2016-3-6 19:35:00 显示全部楼层
哦 不错啊 谢谢。。。。。。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册