一、1、特点(/s/1QIp8E_mpyEeGTRRgsVD4bQ 提取码: zd8b)
Qt Quick是一个现代化的、基于QML的框架。
● QML是Qt Quick的关键组成部分,是一种基于JavaScript的声明性语言,用于描述用户界面的视觉和行为。
● Qt Quick Controls是一套预先设计好的用户界面元素库,包含了诸如按钮、文本框、菜单等常见的UI控件。这些控件可以被轻松地嵌入到QML界面中,并且能够很好地适应不同平台和设备。
● Qt Quick可以用于多种平台,包括桌面、移动设备和嵌入式系统。
二、Qt Quick 基本元素
Qt Quick 作为 QML 的标准库,提供了很多基本元素和控件来帮助我们构建 Qt Quick 应用。如果拿 C++ 来比拟, QML 就相当于 C++ 语言本身,而 Qt Quick 相当于 STL 。好吧,你可能觉得有点驴头不对马嘴,没关系,有这么点儿意思就成。
Rectangle
main.qml 的第三行代码,定义了一个 Rectangle 类型的对象作为 QML 文档的根对象。关于对象在 qml 文件中的描述,《Qt on Android:QML 语言基础》一文中已经讲解,这里不再赘述。下面咱们看看 Rectangle 到底是什么。
Rectangle 用来绘制一个填充矩形,可以带边框,也可以不带,可以使用纯色填充,也可以使用渐变色填充,甚至还可以不填充而只提供边框……
Rectangle 有很多属性。
width 用来指定宽, height 用来指定高,我们已经见识过了。
color 属性可以指定填充颜色,而 gradient 属性则用来设置渐变色供填充使用,如果你同时指定了 color 和 gradient ,那么 gradient 生效;如果你设置 color 属性为 transparent ,那么就可以达到只绘制边框不填充的效果。
border.width 指定边框的宽度, border.color 指定边框颜色。
Rectangle 还可以绘制圆角矩形,你只要设置 radius 属性就行了。
三、QML与QtQuick关系
“QML——Qt Meta Language”
QML是一种声明式脚本语言,是QtQuick技术的核心与基础。
QML是一种规范和编程语言,可以用来描述一个程序的UI。
QML模块提供QML引擎和语言框架——负责解析qml脚本。
1、QML文档分为import 和declaration两部分。
import部分,指定该文档所需要引入的模块,通常是一个模块和版本号。也可以引入其他文件。
四、Qt Widgets 与 QML/Qt Quick
Qt 4.7 发布时,引入了 QML,用于移动开发,其全面支持触摸操作、流畅的动画效果等。但在 Qt 5 中,QML 已经不再局限于移动开发,也可用于开发传统的桌面程序。
相比之下,Qt Widgets 更“老”、更成熟,而 QML/Qt Quick 则更“新”、更“现代”。
无论如何,Qt Widgets 和 QML/Qt Quick 都可以在多个平台上使用(Windows、Linux、OS X等)
对于传统的桌面程序来说,优先考虑使用 Qt Widgets,若要开发更“现代”的 UI 与高级应用,建议使用 Qt5.x + QML 2.x + QtQuick 2.x。
对于移动端开发来说,建议使用 QML,协同 JavaScript,简单快捷、渲染效果更佳、界面更炫酷。不建议使用 Qt Widgets,其显示效果、适应性都不好
五、QtQuick 1.x VS QtQuick 2.x
全新的 Qt 版本
QtQuick 1.x 基于 Qt4.x。
QtQuick 2.x 随 Qt5.0 一起引入。
全新的绘图系统
QtQuick 1.x 使用 QGraphicsView/QPainter API 来绘制场景。
QtQuick 2.x 基于 Scene Graph,一个 OpenGL(ES)2.0 抽象层,对绘图进行了高度优化,效率更高。
全新的 QML 引擎
Qt 4.x 中,QML 引擎基于JSC(JavaScriptCore - Webkit 的 JS 引擎)。
Qt 5.0 中引入 V8(Google 的开源高性能 JavaScript 引擎,用 C++ 编写,用于 Chromium、Node.js 和多个其他嵌入应用程序)。
Qt 5.2 中引入了 V4 JS 引擎,针对 QML 用例进行了优化,并且可以选择关闭 JIT(Just-In-Time)编译,以符合 iOS 和 WinRT 平台的限制。个头更小、反应更快、扩展性也非常好。
从 Qt 5.5 开始,加入了一个新模块 QtQuick3D,它提供使用 QML 语言创建 3D 应用程序/游戏的能力,其使用的是一个被命名为 FrameGraph 的新引擎,而非 Scene Graph(因为太 2D/2.4D)。
模块、属性和方法、类型和 API、C++ 代码(QtDeclarative 被移除了,替代的它是Qt QML 和 Qt Quick 模块)、QML 插件的更改
六、什么是QML?
QML是一种用户界面规范和编程语言。它可以使开发人员和设计师创建出高性能、流畅动画和视觉吸引力的应用程序。QML提供了一种高度可读的、声明式的、类似JSON的语法,支持与动态属性绑定相结合的命令式JavaScript表达式。
QML语言和引擎基础设施由Qt QML模块提供。
七、什么是Qt Quick?
Qt Quick是用于QML的标准类型和功能的库。它包括可视类型、交互类型、动画、模型和视图、粒子效果和着色器效果。通过一个导入语句,QML应用程序开发人员可以获得所有这些功能。
Qt Quick模块提供了QtQuick QML库。
八、只有qml没有quick可以开发吗
可以仅使用QML来开发应用程序,而不使用Qt Quick模块。
QML是一种用于描述用户界面的声明性语言,它可以独立于Qt Quick模块使用。
你可以在QML中创建自定义的界面组件、布局和逻辑,并且可以使用JavaScript来处理用户输入和实现应用程序的行为。
但是,使用Qt Quick模块可以为QML提供更多的预定义类型和功能,使开发过程更加简单和高效。
九、main.cpp
注意: Qt Quick 的mian函数有点区别,加载UI的方式不同,程序如下
#include <QGuiApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[])
{
/* 启用Qt应用程序的高DPI缩放功能 */
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
/* 创建一个Qt应用程序的实例 */
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
const QUrl url(QStringLiteral("qrc:/main.qml"));
/* 将 QQmlApplicationEngine 对象的 objectCreated 信号连接到一个 lambda 函数上 */
/* lambda 函数用于在 QML 文件中的根对象被创建时进行处理,检查对象是否成功创建,如果创建失败则退出应用程序 */
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
&app, [url](QObject *obj, const QUrl &objUrl) {
if (!obj && url == objUrl)
QCoreApplication::exit(-1);
}, Qt::QueuedConnection);
/* 加载QML文件并显示用户界面 */
engine.load(url);
return app.exec();
}