Qt Quick最早出现在Qt的4.7版本中,目标是在UI设计者与开发者之间搭建一个更高效合作平台,给开发者更好的UI开发体验。虽然几经易手,Qt在digia公司这些年的努力迭代更新下,Qt Quick终于迎来了成熟稳定的版本(这也是我愿意在最近的项目里转用它的原因)。
至于Qt Quick和老一套开发核心Qwidget的区别,其中最重点的就是提供了新的UI描述语言QML(Qt Meta-object Language,Qt元对象描述语言)。QML乍看起来有点像json,但是核心思想却是模仿web页面。没错,在QML文件中允许搭配Javascript代码,就可以辅助实现丰富的UI交互逻辑。
如果你以往习惯QWidget开发,那么Qt Quick真的非常值得上手试试。
Qt Quick是一些新UI技术的集合,主要由3部分组成:Qt Creator IDE ( 包含 Qt Quick 设计器 )、QML语言、Qt库中的QtDeclarative模块(Qt4),QML是对JavaScript的一种扩展,利用一个声明性语法,使用QML元素指定每一个用户界面,这些元素组合在一起形成各种组件,Qt的QtDeclarative模块实现了QML语言和对它适用的元素之间的接口,该模块还提供了一个C++接口,可以用来在Qt/C++应用程序中加载QML文件并与之通信(QtDeclarative Module的作用就是将QML元素与以前的标准C++类相结合)
Qt5图形引擎基于GPU,应用开发套件Qt Quick2(适用于触摸屏的UI开发),增加了对C++11支持,加强了对JavaScript和QML的支持,可以混合编程,Qt5是Qt4渐进而平缓的升级,与Qt4高度兼容
Qt5下,QWidget系列从QtGui中被剥离出去,成为单独的QtWidget模块,随着Qt Quick2的引入,QtDeclarative也逐渐和QWidget系列脱离关系,在Qt5下的GUI编程,有两套不同的东西:QtWidget (使用BackingStore)、QtQuick (使用Scene Graph)
Qt Quick应用程序
移动设备的用户界面设计非常不同。它们相对于桌面应用程序更加简洁,只需要专注的做一件事情。动画效果是一个非常重要的部分,用户界面需要生动活泼。传统的Qt技术已经不适于这些市场了。Qt Quick将会解决这个问题。
Qt Quick 提供了一个类似HTML声明语言的环境应用程序作为你的用户界面前端(the front-end),在你的后端使用本地的c++代码。这样允许你在两端都游刃有余。比如:
import QtQuick 2.0
Rectangle {
width: 240; height: 1230
Rectangle {
width: 40; height: 40
anchors.centerIn: parent
color: '#FFBB33'
}
}
在使用 QML 进行界面开发时,我们的目标是创建一套流体界面,所谓流体界面指的是UI组件是动态变化的。举个例子,当界面上的组件需要变化时,如果视觉画布突然变化会导致用户的体验感比较差。而如果在状态的变化过程中,我们添加一些引导,把状态从初始慢慢变化到目标状态,让用户可以感受到这个变化的过程,那么用户的感官体验这一块就会大大提升了,而这也就是所谓的动态变化这里需要引出几个重要的概念:State(状态)、Transition(过度)、Animation(动画)State(状态):所有项目都有一个默认状态,用于定义对象和特性值的默认配置。可以通过向 states 属性添加状态项来定义新状态,以允许项在不同配置之间切换Transition(过度):发生状态更改时要应用的动画Animation(动画):随着时间的推移逐渐改变属性
Qt Quick 是 Qt 提供的一种高级用户界面技术。使用它可轻松地为移动和嵌入式设备创建流畅的用户界面。
在 Android 设备上, Qt Quick 应用默认使用 OpenGL ES ,渲染效率很高,你能够用它创建很炫很酷很迷人的界面。
Qt Quick 模块是开发 QML 应用的标准库,提供了使用 QML 创建用户界面所需的一切东西,包括可视化类型、交互类型、动画、模型与视图、粒子效果与着色效果等等。
Qt Quick 提供了两组 API :
QML API ,它提供了使用 QML 语言创建用户界面所需的 QML 类型。
C++ API ,供开发人员使用 C++ 扩展 QML 应用。
Qt Quick 包括下列主题:
可视化的 Canvas
用户输入
元素定位与布局
状态、过渡和动画
数据模型、视图和数据存储
粒子和图形特效
方便类型
要使用 Qt Quick ,必须知道如何使用 QML 语言来撰写 QML 应用。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。