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以后主流的大趋势。

相关推荐
BingoGo1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack4 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
西岸行者5 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
QQ5110082855 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php