QT 原生布局和QML的区别

news2024/11/18 15:36:43

        

一、QML 与 Qt Quick的区别

1.1 从概念上区分

为了更精确地对两者进行说明,先看助手对 QML 的描述:

QML is a user interface specification and programming language.

QML 是一种用户界面规范和标记语言,允许开发人员和设计师创建高性能、流畅的动画和视觉吸引人的应用程序。 文档对 QML 的定义主要分为两点:

  • 用户界面规范:QML 提供了一种高度可读、声明性、类似 JSON 的语法,支持与动态属性绑定相结合的命令式 JavaScript 表达式。
  • 标记语言:像 C++ 一样,QML 是一种语言,文件格式以 .qml 结尾。
 

再看助手对 Qt Quick 的描述:

Qt Quick is the standard library of types and functionality for QML.

Qt Quick 是 QML 类型和功能的标准库, 包括视觉类型、交互式类型、动画、模型和视图、粒子效果和着色效果。

Qt Quick 使用 QML 作为声明语言,来设计以用户界面为中心的应用程序。严格来讲,Qt Quick 是一个用于 QML 的工具包,允许以 QML 语言来开发图形界面。

 

1.2 从模块上区分

QML 由 Qt QML 模块提供,QtQuick QML 库由 Qt Quick 模块提供。

  • Qt QML 模块:为 QML 应用程序提供了语言和引擎基础结构。
  • Qt Quick 模块:提供了许多可视化组件、模型视图支持、动画框架以及用于构建用户界面的更多功能。
 

二、QtQuick 1.x 与 QtQuick 2.x 的区别

QtQuick 主要包括:QtQuick 1.x 和 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/Qt Quick?

在我看来,主要归结为以下几点:

  • 战略性发展

    Qt 想用 QML/Qt Quick 一统天下(桌面 + 移动端)。梦想还是要有的,万一实现了呢?

    众所周知,Qt 为跨平台而生,而 QML/Qt Quick 作为 Qt 新生力量,完完全全继承了 Qt 包罗万象的特点,它的诞生为 Qt 进军移动领域迈出了历史性的一步。

    随着 Qt 的不断迭代,QML/Qt Quick 也可用于开发传统的桌面程序,而且效率越来越高,这样以来,便可以用 QML/Qt Quick 做任何你想做的事情。QML/QtQuick 作为 Qt 的绝对核心,特别是对于界面要求较高的开发者来说,其作用更为重要。

  • 开发效率的提升

    传统上的 native UI 开发普遍使用 C++、C#、Objective-C 等语言。但近年来,本地应用使用 HTML5 + JS 也成为了一种趋势。一方面硬件资源越来越丰富,另一方面 Web 技术让 JS 的解析速度更快。

    除此之外,其中一部分功劳要归功于 Google,由于其开源了其 NB 的 JS 引擎,Node.js 加上一个前端框架也可以开发本地应用了。例如:Electron - 构建跨平台的桌面应用程序。

    QML/Qt Quick 和 Node.js 类似,也提供了一系列 JS 和 C++ 交互的接口,便于 JS 和 C++ 通信。

  • UI 与逻辑分离

    尽管对于大多数情况而言,在编写应用程序时只需 QML 和 JavaScript,但在有些情况下需要计算密集型任务(例如:复杂图像处理、物理引擎),并且将需要处理器竭力提供所有可用性能。

    在这些情况下,QML 应用开发适合使用 C++ 来进行扩展,以便在后台执行资源密集型任务,而界面设计和一些简单逻辑(例如:按钮变色、换肤、变形等)都可以在 JS 中完成。这样避免了传统应用开发前端设计和后台逻辑混合的情况,让界面设计者专心设计界面成为了可能。

    由于 QML 是在 Qt 上构建的,因此其继承了 Qt 框架中的大部分功能,尤其是信号和槽机制以及元对象系统。使用 C++ 创建的数据可从 QML 直接访问,而 QML 对象也可从 C++ 代码进行访问。

 

四、Qt Widgets 与 QML/Qt Quick

Qt 4.7 发布时,引入了 QML,用于移动开发,其全面支持触摸操作、流畅的动画效果等。但在 Qt 5 中,QML 已经不再局限于移动开发,也可用于开发传统的桌面程序。

随着 Qt 5 的持续更新,QML 已经大大改善 - 添加了更多的功能、更好的性能以及更多的平台支持。话虽如此,但 QML/Qt Quick 仍在发展,随着版本的更新,也会变得越来越成熟。

  • 相比之下,Qt Widgets 更“老”、更成熟,而 QML/Qt Quick 则更“新”、更“现代”。
  • 无论如何,Qt Widgets 和 QML/Qt Quick 都可以在多个平台上使用。

对于传统的桌面程序来说,优先考虑使用 Qt Widgets,若要开发更“现代”的 UI 与高级应用,建议使用 Qt5.x + QML 2.x + QtQuick 2.x。

对于移动端开发来说,建议使用 QML,协同 JavaScript,简单快捷、渲染效果更佳、界面更炫酷。不建议使用 Qt Widgets,其显示效果、适应性都不好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1386160.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

央视推荐的护眼灯是哪款?教育部认可护眼灯品牌

许多家长一般都会给孩子买上许多学习用品,比如现在一些学习桌椅、读写笔灯等等,配有蛮多的学习用具,但对孩子学习时用的护眼台灯很忽略,没有给孩子选好真正合格好用的护眼台灯,就容易让孩子的视觉形成偏差,…

外汇天眼:分析K线背后的力量,别让自己只停留在画线的阶段!

不确定性是市场的本质,也是它魅力所在。 大部分学习技术分析的新手以及亏货老手所能理解的技术分析就是在已经走完的图表上画线,或者研究K线形态,组合形态,等等...... 然后根据画的线和形态来预测未来走势,并依据这个…

深入理解 go RWMutex

在上一篇文章《深入理解 go Mutex》中, 我们已经对 go Mutex 的实现原理有了一个大致的了解,也知道了 Mutex 可以实现并发读写的安全。 今天,我们再来看看另外一种锁,RWMutex,有时候,其实我们读数据的频率要…

深度探讨 Golang 中并发发送 HTTP 请求的最佳技术

💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 在 Golang 领域,并发发送 HTTP 请求…

浊度水质分析仪的功能特性,及其在环境监测中的重要作用

在环境保护和水资源管理领域,对水质的精准监测是确保水体健康、保障公众用水安全的重要环节。其中,浊度作为衡量水体中悬浮物含量的关键参数,其精确测量对于环境评价和治理至关重要。浊度水质分析仪正是这样一款专门针对浊度进行实时在线监测…

【计算机组成-算术逻辑单元】

课程链接:北京大学陆俊林老师的计算机组成原理课 1. 算术运算和逻辑运算 算数运算 逻辑运算 算数逻辑运算的需求 算数运算:两个32-bit数的加减法,结果为一个32-bit数;检查加减法的结果是否溢出逻辑运算:两个32-bit数…

2024谷歌SEO自学基础入门

2024年可能会迎来大航海时代,国内各企业也加速了出海的步伐!! (看总额,今年中国跨境电商,前三季度进出口1.7万亿元人民币,创造了14.4%的增长。 看体量,过去五年,中国跨…

【ESP32最全学习笔记(基础篇)——1.ESP32简介】

ESP32 新手?从这里开始! 关于本教程: ESP32 基础篇 1.ESP32简介 ☑ 2.ESP32 Arduino 集成开发环境 3.ESP32 Arduino IDE 2.0 4.VS 代码…

Arduino快速上手esp8266方案开发

认识ESP8266 ESP8266 是 Espressif Systems 生产的 Wi-Fi 片上系统 (SoC)。它非常适合物联网和家庭自动化项目,目前有非常高的市场普及率,还有更加高端的同时支持wifi和蓝牙的双核心芯片ESP32,可以在乐鑫官网查看完整的芯片列表。 ESP8266芯…

Microsoft Remote Desktop for Mac 中文正式版下载 微软远程连接软件

Microsoft Remote Desktop 是一款专为 Mac 用户设计的远程桌面工具,它可以帮助用户通过网络连接到其他计算机,实现远程控制和操作。 软件下载:Microsoft Remote Desktop for Mac 中文正式版下载 该工具支持多种远程连接协议,包括 …

imgaug库指南(23):从入门到精通的【图像增强】之旅

引言 在深度学习和计算机视觉的世界里,数据是模型训练的基石,其质量与数量直接影响着模型的性能。然而,获取大量高质量的标注数据往往需要耗费大量的时间和资源。正因如此,数据增强技术应运而生,成为了解决这一问题的…

DMVAE复现

复现结果–M->S:88.11,S->M:83.75,Joint:44.63,与原文差距在0.5个点内,可以接受 额外信息 第三篇完全复现的论文

Python实现递归最小二乘法回归模型(RecursiveLS算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 RLS主要是在误差平方和最小的原则基础上, 提出一种解析的拟合模型参数的迭代递推公式;可以实现在新的样…

案例126:基于微信小程序的民大食堂用餐综合服务平台

文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…

warning: GDB: Failed to set controlling terminal: Operation not permitted

运行环境 windows 10 wsl 1 ubuntu 20.04子系统 出现这个问题是因为运行在wsl1上,把系统运行到wsl2就行了。 解决办法 运行到wsl2 https://zhuanlan.zhihu.com/p/337104547 wsl2安装办法 关于编译个一个小问题,在vscode编译的一定要选对编译器&#…

开关电源如何覆铜

开关电源如何覆铜 开关电源覆铜是一个很重要的技术方法,如果没有很好的覆铜,就有可能会造成开关电源芯片的损坏。先介绍常见的开关电源电路: 图 1开关电源电路 从左到右分别是非同步整流Buck电路和同步整流Buck电路,第二排从左到…

Openharmony入门教程 相册问题修复

问题视频: 第五章-保存应用数据 _调用系统相册添加图片_哔哩哔哩_bilibili 跟着视频学习了Openharmony的入门,好不容易到了最后一个章节了,结果遇到了功能无法使用,还是得想办法 问题描述: 按照视频上的代码&#xf…

opencv-py-基础操作

文章目录 阈值分割灰度图效果 二值化效果 二值化取反效果 截取效果 TOZERO效果 TOZERO取反效果 滤波均值滤波高斯滤波中值滤波 图像拼接简单的横向和纵向拼接效果(三幅图片分别是均值滤波,高斯滤波,中值滤波) 腐蚀与膨胀 阈值分割…

vue下载文件流效果demo(整理)

在 Vue 项目中&#xff0c;你可以使用 FileSaver.js 库来方便地下载文件流。FileSaver.js 封装了不同浏览器的下载方式&#xff0c;使得下载文件更加简单和兼容。以下是一个完整的示例方法&#xff1a; 首先&#xff0c;安装 FileSaver.js 库&#xff1a; <template>&l…