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以后用于的主流,是大趋势。
相关文章:
QML学习(一) Qt Quick和QML介绍以及适用场景说明
一.介绍 1.Qt Quick 介绍 Qt Quick 提供了一套高动态,丰富的 QML 元素来定制用户界面的说明性框架。Qt Quick 有助于程序开发员与界面设计员的合作为便携式设备建立流畅的用户界面,例如:移动电话、媒体播放器,机顶盒以及上网本等…...
深入理解 PyTorch 的 view() 函数:以多头注意力机制(Multi-Head Attention)为例 (中英双语)
深入理解 PyTorch 的 view() 函数:以多头注意力机制(Multi-Head Attention)为例 在深度学习模型的实现中,view() 是 PyTorch 中一个非常常用的张量操作函数,它能够改变张量的形状(shape)而不改…...
使用PHP函数 “setcookie“ 设置cookie
在网站开发中,cookie是一种非常常用的技术,它用于在用户的浏览器中存储少量的数据,以便在不同页面之间传递信息。PHP提供了一个名为 "setcookie" 的函数,用于设置cookie的值和属性。在本文中,我们将学习如何…...
redis优化
在高并发、高性能、高可用系统中,Redis 的优化至关重要。以下是一些在面试中可以详细说明的 Redis 优化策略,以及具体的实践经验和技术亮点: 1. 数据模型与结构设计优化 使用合适的数据结构 :根据业务需求选择合适的 Redis 数据结…...
数据分析的革命——解读云数据库 SelectDB 版的力量
在当今数据驱动的时代,实时数据分析已成为企业决策中的关键一环。如何在海量数据中快速找到核心价值,如何让决策者在毫秒间洞悉变化,这不仅考验着企业的技术能力,也对基础设施提出了新的要求。云数据库 SelectDB 版,正…...

Ngnix介绍、安装、实战及用法!!!
一、Nginx简介 1、Nginx概述 Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理服务器,特点是占有内存少,并发能力强,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数 。 2、正向代理 正向代理:如果把局…...

算法基础一:冒泡排序
一、冒泡排序 1、定义 冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。 …...

云开发实战教程:手把手教你高效开发应用
声明:本文仅供实践教学使用,没有任何打广告成分 目录 1.引言 2.云开发 Copilot介绍 云开发 Copilot 的功能与特点 3.环境准备 步骤一登录账号 步骤二新建环境 4.开发实践 4.1AI 生成低代码应用 4.2AI 生成低代码页面/区块 4.3AI 优化低代码组件…...

Git基本操作快速入门(30min)
Git基本操作快速入门(30min) 文章目录 Git基本操作快速入门(30min)1. 建立本地仓库2. 本地仓库链接到远端仓库3. 将本地仓库推送到远端4. Git常用命令 作为一名程序员,使用Github来进行代码的版本管理是必修课…...

VS Code AI开发之Copilot配置和使用详解
随着AI开发工具的迅速发展,GitHub Copilot在Cursor、Winsuf、V0等一众工具的冲击下,推出了免费版本。接下来,我将为大家介绍GitHub Copilot的配置和使用方法。GitHub Copilot基于OpenAI Codex模型,旨在为软件开发者提供智能化的代…...
QT中使用OpenGL function
1.前言 QT做界面编程很方便,QTOpenGL的使用也很方便,因为QT对原生的OpenGL API进行了面向对象化的封装。 如: 函数:initializeOpenGLFunctions()...... 类:QOpenGLVertexArrayObject、QOpenGLBuffer、QOpenGLShader…...

STM32-笔记16-定时器中断点灯
一、实验目的 使用定时器 2 进行中断点灯,500ms LED 灯翻转一次。 二,定时器溢出时间计算 Tout:定时器溢出时间 Ft:定时器的时钟源频率 ARR:自动重装载寄存器的值(可设置ARR从0开始,但是计数到…...
Live555、FFmpeg、GStreamer介绍
Live555、FFmpeg 和 GStreamer 都是处理流媒体和视频数据的强大开源框架和工具,它们广泛应用于实时视频流的推送、接收、处理和播放。每个框架有不同的设计理念、功能特性以及适用场景。下面将详细分析这三个框架的作用、解决的问题、适用场景、优缺点,并…...
oracle基础:理解 Oracle SQL 中的 WHERE 后的 (+) 用法
在使用 Oracle 数据库进行 SQL 查询时,可能会遇到 WHERE 子句后带有 () 的语法。这是 Oracle 专有的外连接(Outer Join)表示法。虽然现代 SQL 标准推荐使用 LEFT JOIN 和 RIGHT JOIN 语法,但在某些遗留系统中,这种写法…...

【linux】进程间通信(IPC)——匿名管道,命名管道与System V内核方案的共享内存,以及消息队列和信号量的原理概述
目录 ✈必备知识 进程间通信概述 🔥概述 🔥必要性 🔥原理 管道概述 🔥管道的本质 🔥管道的相关特性 🔥管道的同步与互斥机制 匿名管道 🔥系统调用接口介绍 🔥内核原理 …...

【深度学习】卷积网络代码实战ResNet
ResNet (Residual Network) 是由微软研究院的何凯明等人在2015年提出的一种深度卷积神经网络结构。ResNet的设计目标是解决深层网络训练中的梯度消失和梯度爆炸问题,进一步提高网络的表现。下面是一个ResNet模型实现,使用PyTorch框架来展示如何实现基本的…...
org.apache.zookeeper.server.quorum.QuorumPeerMain
QuorumPeerMain源代码 package org.apache.zookeeper.server.quorum;import java.io.IOException; import javax.management.JMException; import javax.security.sasl.SaslException; import org.apache.yetus.audience.InterfaceAudience; import org.apache.zookeeper.audi…...

oscp学习之路,Kioptix Level2靶场通关教程
oscp学习之路,Kioptix Level2靶场通关教程 靶场下载:Kioptrix Level 2.zip 链接: https://pan.baidu.com/s/1gxVRhrzLW1oI_MhcfWPn0w?pwd1111 提取码: 1111 搭建好靶场之后输入ip a看一下攻击机的IP。 确定好本机IP后,使用nmap扫描网段&…...
SkyWalking java-agent 是如何工作的,自己实现一个监控sql执行耗时的agent
Apache SkyWalking 是一个开源的应用性能监控 (APM) 工具,支持分布式系统的追踪、监控和诊断。SkyWalking Agent 是其中的一个重要组件,用于在服务端应用中收集性能数据和追踪信息,并将其发送到 SkyWalking 后端服务器进行处理和展示。 SkyW…...

每天40分玩转Django:Django表单集
Django表单集 一、知识要点概览表 类别知识点掌握程度要求基础概念FormSet、ModelFormSet深入理解内联表单集InlineFormSet、BaseInlineFormSet熟练应用表单集验证clean方法、验证规则熟练应用自定义配置extra、max_num、can_delete理解应用动态管理JavaScript动态添加/删除表…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...

如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...

使用SSE解决获取状态不一致问题
使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件,这个上传文件是整体功能的一部分,文件在上传的过程中…...