Qt之qml入门

QML入门基础

******************************************************************************

Agenda

 

1、背景

2、QML的简介

3、QML语法和Qt Quick基础

4、QML与C++的交互

5、与GraphicsView渲染的对比

**************************************************

 

1、       背景

       将程序的用户界面称为前端,将程序的数据存储和业务逻辑称为后端,那么传统Qt应用程序的前段和后端都是使用C++来完成的。对于现代软件开发而言,这里有一个存在已久的冲突:前端的演化速度远快于后端。当用户希望在项目中改变界面,或者重新开发界面时,这种冲突就更明显地显现出来。快速演化的项目必然要求快速的开发。

 可否将前端的一个开发给独立出来呢?

 

2、       QML的简介

QML(Qt Meta—Object Language,Qt元对象语言)是一种用于描述应用程序用户界面的声明式编程语言,使用一些可视化组件以及这些组件之间的交互来描述用户界面。QML提供了一个具有高可读性的类似JSON的声明式语法,并提供必要的JavaScript语句和动态属性绑定的支持。

 

Qt Quick是QML的一个数据类型和功能的标准库,包含了可视化类型、交互类型、动画、模型和视图、粒子特效和渲染特效等。在QML程序中,可以直接通过简单的import语句来使用该模块提供的所有功能。在Qt5中的Qt Quick模块是2.x版本。QML是语言名称,Qt Quick是QML语言库的名称,它定义并实现了QML语言及其解释引擎的基础构件,提供了共开发人员扩展的接口,以及将QML代码与JavaScript和C++集成在一起的接口。Qt QML模块是QML语言的具体实现;Qt Quick模块是Qt Quick库的具体实现。

 

Qt Quick 模块是一个编写QML应用的标准库,提供了两种接口:使用QML语言创建的QML接口和使用C++语言扩展QML的C++接口。使用Qt Quick模块,设计人员和开发人员可以轻松的构建流畅的动态的QML用户界面,并且在需要的时候,将这些用户界面连接到任何C++后端。

 

 

•   我们可以用一种极具革命性的方式来创建现代用户界面,即把UI设计和业务逻辑完全分离,使得快速UI原型开发成为可能。

 

3、       QML语法和基础

1)导入语句(import)

用于模块、JavaScrip资源和组件的导入,首先导入QtQuick模块。

2)基础类型

基础可视:Item、Rectangle、Text、Image等。

布局管理器:Column、Row、Grid、Flow等

事件处理:MouseArea、Timer等(鼠标键盘等信号)

动态加载组件:Loader

模型和视图:ListView、PathView等

2-1)id特性

2-2)属性特性(属性的自定义,赋值)

     2-3、信号和信号处理器

     2-4、附加属性和附加信号处理器

2-5、          ObjectName属性

3)进阶

  3-1)Canvas(类似Qpainter功能,用户可以随心所欲的绘制自己想要的控件)

  3-2)粒子系统

是一种三维计算机图形学中模拟一些特定的模糊现象的技术。很多自然现象,比如火、爆炸、烟雾、水流、云、落叶、流星等这种抽象视觉效果,就可以使用粒子效果进行模拟。

   3-3)多媒体应用(视频、音乐播放)

   3-4)3D场景

 

4、 QML与C++的交互

目的:QML与C++整合的目的在于使QML能够单纯地进行界面的渲染,而由C++完成业务逻辑和数据集。

QML和 C++对象可以通过,signals,slots和 属性修改进行交互。对于一个C++对象,任何数据都可以通过Qt的 Meta-Object System暴露给QML,同时,任何的QML对象数据通过Meta-object system在C++端直接访问。
在这里不外乎有三种方法:
1) 把QtC++中的对象或类型暴露给 QML端,供QML端使用。
2) QML中的Signal Handler(相当于Qt C++发送信号给QML端,QML端的Signal Handler进行处理)。
3) 在QtC++端创建QML对象,既然对象都有了。那你想怎么样它就怎么样它呗。

(如果想详细了解Qt的元对象系统,请参考:http://www.cnblogs.com/aoldman/p/4103510.html)

 

5、 Graphics View渲染机制和SceneGraph渲染机制Qt之qml入门_第1张图片

Qt之qml入门_第2张图片

Scene Graph主要利用OpenGL( ES )2的渲染优势,在2D和3D以非常流畅的速度进行渲染,满足日益增长的界面效果需求,同时SceneGraph预留了各种各样的接口,满足大家定义显示和渲染效果的需要。在渲染部分精简了渲染堆栈,并且充分利用显卡加速,将渲染负担转移到GPU来进行,实现了负载均衡。Scene Graph是直接构建在OpenGL之上的,Qt在其之上有QQuickPaintedItem等方便的类,它可以像QPainter那样对其进行渲染操作,从来没有接触过OpenGL开发的开发者也可以很快上手。

Qt的SceneGraph要点是批量渲染。这是由OpenGL的特性决定的,因为通过OpenGL,将以往CPU串行的部分并行化,从而大大提升渲染效率,再加上OpenGL本质上是一个巨大的状态机,在进行批量渲染的时候,可以有效地减少OpenGL状态切换所带来的性能开销,同时OpenGL预留的一些状态,需要开发者有基本的认知,由于OpenGL是一个开放的标准,因此考虑到兼容性,其采用了C/S架构。C端即CPU部分,S端对应GPU。在顶点和纹理数据从C端传入S端之前,会在C端形成一个缓冲区(一说缓存),我们常说的VBO、FBO和PBO就是这一类缓冲区。正确地设置缓冲区的数量和大小,可以为应用程序的性能提升带来很大的帮助。

Qt的SceneGraph在Qt 5.1到Qt5.2时有一个质的飞跃,因为其内部采用了新的SceneGraph渲染器。在Qt中,渲染器是可以替换的,所以说Qt5.1之前采用的渲染器和Qt5.2采用的渲染器是很不一样的。Qt官方当时做了一个性能测试,测试表明,OpenGL的API调用次数得到了显著的降低。其中采用了很多先进的思想比如说纹理图集(TextureAtlas)。Scene Graph总体的目标就是批量、批量再批量。

 

你可能感兴趣的:(Qt,qt,qml,scene,graph,渲染机制,QML入门基础)