在Qt 4中,Qt Quick只是在QGraphicsView之上做了简单的封装,并通过QtScript和JavaScript来为其提供脚本支持。基于QGraphicsView之上的QML在功能上仅仅限于那些绝对必要且速度可以足够快的绘制美观用户界面的部分。对于那些潜在影响绘制速度的高级功能,比如组合模式、QPainterPaths、QGraphicsEffects和复杂的画笔等都不被支持的。
(图1)Qt4中的Qt Quick架构
QT5中,QML和Qt Quick完全分离,两者对于QT而言相当于一个新语言和全新的类型库,架构图如下:
(图2)Qt5中的Qt Quick架构
Qt Qml 模块本身并没有涉及图形显示,所有图形处理都由Qt Quick模块完成Qt Quick以QPA为基础,之上经过了Qt Gui、OpenGL、和 SceneGraph这三层封装。
一、Qt Quick项目
按照类型的不同可以分为: Qt Quick UI项目、Qt Quick Application项目
(一)Qt Quick UI项目
Qt Quick UI项目中只包含QML和JavaScript代码,没有添加任何C++代码,对于QML文件,无需编译就可以直接在预览工具中预览效果;不仅如此,在没有安装开发环境的系统中也可以创建运行该类项目。
在选择QT版本时对应的哪些组建:
Qt Quick Controls 1.1: 创建 Qt Quick 2 UI 项目, 要求Qt5.2及以上版本
Qt Quick Controls 1.0: 创建 Qt Quick 2 UI 项目, 要求Qt5.1及以上版本
Qt Quick 2.2:创建Qt Quick2 UI 项目, 要求Qt5.2及以上版本
Qt Quick 2.1:创建Qt Quick2 UI 项目, 要求Qt5.1及以上版本
Qt Quick 1.1:创建Qt Quick1 UI 项目, 要求Qt4.8及以上版本
用Qt Quick模块的相应组件时,会自动生成一个普通的主视图界面。创建完毕可以使用QML Scene 直接预览Qt Quick 2UI 项目,不需要进行构建,也不需要在系统上搭建额外的开发环境。
创建成功后有两个文件如下:
项目文件主要指定了项目中所用的qml文件、JavaScript文件和图片文件所在的目录(默认目录为当前目录,即项目目录)
在程序运行时并没有编译的过程,单独的QML文件并不需要进行编译,就能够直接在qmlscene中进行预览,在Qt Quick2 中,QML文件的预览工具是QML Scene, 使用它可以在开发应用时直接加载QML文件进行预览和测试,也可以在“工具 -> 外部 -> Qt Quick”中运行工具
二、Qt Quick Application项目
在之前的QT开发中,传统的开发qt应用程序的项目的前端,以及数据逻辑的后端都是使用c++开发的,但是现在软件开发,对前端变化需求日益高涨,这与传统相违背,所以为了前端的快速更迭,最好的方式将前后端分离,使用Qt Quick完成。
这种Qt Quick应用程序可以同时包含QML 和C++代码。程序中包含了一个QQuickView用于显示前端,可以将Qt Quick应用项目部署到桌面或者移动平台;
项目文件介绍:
1、.pro:项目文件。这是普通的QT项目文件,指定程序使用的模块、源文件、资源文件等
2、.pri :这是项目文件的补充,需要包含在项目文件中。类似include的头文件,这个文件指出了编译到不同平台时的特殊设置。因为这些设置仅与项目的部署相关,所以不需要全部添加到项目文件中,而单独列出
3、main.cpp:其中包含了main()函数,用于加载QML文件
4、.qrc:资源文件,所有的QML文件、图片等都作为资源放在资源文件中。qml 文件也是资源文件的一部分
加载QML文件是在main.cpp中实现的如下:
#include
<QGuiApplication>
#include
<QQmlApplicationEngine>
int
main(
int
argc,
char
*argv[])
{
QGuiApplication
app(argc,
argv);
QQmlApplicationEngine
engine;
engine.load(
QUrl(
QStringLiteral(
"qrc:/main.qml")));
return
app.exec();
}
这里使用的QQmlApplicationEngine类来加载QML文件。这个类主要提供一个简易的方式,将一个QML文件加载到正在运行的程序中。