zoukankan      html  css  js  c++  java
  • Qt的Script、Quick、QML的关系与总结

     

    背景


    最近在学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 之间的关系。希望看文章的你也清楚了。

  • 相关阅读:
    SQL Server 阻止了对组件 'Ole Automation Procedures' 的 过程'sys.sp_OACreate' 的访问
    谷歌浏览器扩展程序manifest.json参数详解
    获取天气api
    UVA 10385 Duathlon
    UVA 10668 Expanding Rods
    UVALIVE 3891 The Teacher's Side of Math
    UVA 11149 Power of Matrix
    UVA 10655 Contemplation! Algebra
    UVA 11210 Chinese Mahjong
    UVA 11384 Help is needed for Dexter
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/4367715.html
Copyright © 2011-2022 走看看