QML学习(一) Qt Quick和QML介绍以及适用场景说明

一.介绍

1.Qt Quick 介绍

Qt Quick 提供了一套高动态,丰富的 QML 元素来定制用户界面的说明性框架。Qt Quick 有助于

程序开发员与界面设计员的合作为便携式设备建立流畅的用户界面,例如:移动电话、媒体播放器,机顶盒以及上网本等。Qt Quick 包含了 QtDeclarative C++模块,QML 并且它们全被整合到 Qt Create IDE 中。使用 QtDeclarative C++模块可以从你的 QT 应用程序中载入 QML 文件并与之互动。

核心模块:

QtQuick:是 QML 的基础模块,提供了基本的可视化组件,如矩形 Rectangle 、文本 Text 、按钮 Button 等,以及用于布局和定位的 anchors 属性等,是构建 QML 用户界面的核心部分。

QtQuick.Window:用于创建窗口和管理窗口相关的属性和行为,如窗口的大小、标题、可见性等。

QtQuick.Controls:提供了一系列可定制的用户界面控件,如按钮、文本框、滑块、菜单等,方便开发者快速构建具有交互性的用户界面

2.QML介绍

QML 是对 JavaScript 一种扩展,它提供一种机制使用 QML 元素来说明构建一个对象树。QML 对

JavaScript 与 Qt 现有的 QObject- base 类型系统进行整合改善;增加了自动属性绑定的支持并提供在语言级别的网络透明度。

QML 元素是一套先进的图形,就像搭积木方式那样构建界面。这些不同的元素是通过 QML 文档来

绑在一起的,从简单的按钮与滑块到复杂完整的应用程序,例如一个受欢迎的 Flickr 照片共享网站上的照片浏览器。

QML核心特性有:

声明式编程 :开发者只需描述界面的外观和行为,而无需关注具体的绘制和布局细节,如创建一个按钮,只需声明Button { text: "Click Me"; onClicked: { console.log("Button clicked"); } },无需编写复杂的绘制和事件绑定代码。
数据绑定 :可以将一个属性的值绑定到其他属性或表达式的值上,当绑定的源属性值发生变化时,目标属性会自动更新,如Rectangle { width: parent.width - 50; height: 100; color: "yellow" }中矩形的宽度绑定到父对象宽度减去 50。
信号与槽机制:对象可以发出信号,其他对象可以通过定义槽函数来响应信号,实现对象之间的通信和交互,如按钮的clicked信号,可在按钮被点击时触发相应的操作。

QML语法方面按照作用主要分为:

对象声明 :QML 使用类似 JSON 的语法,通过对象类型和花括号来声明对象,如Rectangle { width: 200; height: 200; color: "blue" }声明了一个宽度为 200、高度为 200、颜色为蓝色的矩形对象;
属性定义 :属性用于描述对象的特征,采用property: value的语法,如width: 200定义了矩形的宽度属性;
注释:支持单行注释//和多行注释/* */,用于解释代码功能和逻辑。

3.Qt Quick和QML的关系

Qt Quick 是建立在 Qt 固有优势的基础上。QML 可被用于逐步扩展现有的程序或创建全新的应用

程序。QML 通过 QtDeclarative 模块来完全扩展 C++功能。

Qt4.7版本开始引进了Qt Quick,它让Qt的使用者可以用简单的元素对象创建一套界面组件,并通过组合界面组件的方式来完成软件界面需求。但对于Qt Quick的大量应用实际是Qt5.0版本开始,并且随着硬件设备性能的提升,Qt Quick急剧快速发展和使用。

Qt Quick是框架,QML是语言。就好比Qt是框架,C++是语言;MFC是框架,VC++是语言。道理是一样的。Qt Quick是用C++搭建起来的一套DirectUI/Immediate UI框架,在这个框架上可以用和js语法一样的qml语言开发界面。简单说就是Qt原来的Widget界面框架用的C++语言开发,现在为了适应越来越酷炫的界面渲染和匹配现代流行的标记语言,原来的C++已经不能满足,就引入了JavaScript 语言并进行优化,然后为其开发了Qt Quick模块,Qt Quick内部集成了google V8引擎作为qml的解释器,以用于和原C++的框架做了交互和适配。

二.选择使用

那什么情况适合用Qt Widget,什么情况适合用Qt Quick呢?

从理论上说,不管什么样的用户需求,只要你某种框架研究到极致,都可以做出来,但实际上随着开发语言机器框架的不断更新迭代,总有一些语言框架在某一领域使用起来更顺畅,开发效率更高,做出的产品也更完美。所以好多人说:移动端适合用Qt Quick,一般桌面应用程序适合用Qt Widget,从大环境来说,确实基本如此。

但实际上,用界面渲染方式来做选择更为合适:

1.如果要充分考虑控件实时动态变化的情形,或者只要是应用是动态界面,那么Qt Quick就是适合的,例如仿真系统、监控系统、游戏等等。

2.如果界面中有大量静态控件,例如邮箱,表格或者像Ps这样按钮特别多的复杂界面就是静态界面,界面中有大片的区域不需要刷新,那么就不适合用Qt Quick,因为全局刷新会消耗更多CPU和内存资源,这时候选择Qt Widget更为合适。

当然,随着硬件性能的不断提高,不管是桌面应用程序的开发,还是移动端的开发,建议是能用Qt Quick开发的都尽量用Qt Quick框架去做。因为越来越多的桌面应用需要动态界面,有的还是3D界面,都是普遍的要求,而且作为使用标记语言开发,Qt Quick框架也是Qt以后主流的大趋势。

相关推荐
霜雪殇璃27 分钟前
2021.12.28基于UDP同信的相关流程
笔记·学习
yz71732 分钟前
计算机网络•自顶向下方法:网络应用原理
学习·计算机网络
游王子2 小时前
Python学习(5):数据结构
开发语言·数据结构·python·学习
xybDIY2 小时前
【亚马逊云】使用 AWS Client VPN 终端节点并使用 OpenVPN 测试其连通性
云计算·php·aws
南宫生3 小时前
力扣-数据结构-8【算法学习day.79】
java·数据结构·学习·算法·leetcode
Clarkbrave3 小时前
PHP框架+gatewayworker实现在线1对1聊天--mysql数据库(3)
数据库·mysql·php
武昌库里写JAVA3 小时前
mysql乱码、mysql数据中文问号
java·开发语言·spring boot·学习·课程设计
山山而川粤3 小时前
记忆旅游系统|Java|SSM|VUE| 前后端分离
java·开发语言·后端·学习·mysql
热爱编程的小曾3 小时前
PHP后执行php.exe -v命令报错并给出解决方案
开发语言·php
小伍_Five3 小时前
掌握大数据处理利器:Flink 知识点全面总结【上】
大数据·学习·flink