Qt6 第一天认识基本模块、附加模块、支持的平台、QML用户界面

news/2024/4/28 19:39:47/文章来源:https://blog.csdn.net/m0_45463480/article/details/131565293

文章目录

  • Qt6 焦点
  • Qt6 核心-基本模块
  • Qt6 附加模块
  • Qt6 支持的平台
  • Qt6 简介
  • Qt6 消化用户界面


Qt6 焦点

Qt 5在很多年前发布,引入了一种新的声明方式来编写令人惊叹的用户界面。从那时起,我们周围的世界发生了很大的变化。

Qt 6将是Qt 5的延续,不会对大多数用户造成干扰。是什么让Qt对用户有价值?

  1. 它的跨平台特性
  2. 它的可扩展性
  3. 世界一流的API和文档
  4. 可维护性、稳定性和兼容性
  5. 一个庞大的开发者生态系统

桌面市场是Qt产品的基础。这是大多数用户第一次接触Qt的地方,也是Qt工具及其成功的基础。
预计Qt 6将在嵌入式和互联设备市场增长最多,从高端近桌面执行设备到微控制器等低端设备。对于这些设备来说,触摸屏的数量将呈指数增长。这些设备中的许多将具有相对简单的功能,但是需要完美和平滑的用户界面。

另一方面,需要更复杂的2D/3D集成用户界面。具有基于2D元素的界面的3D内容将很常见,增强和虚拟现实的使用也将如此。
互联设备的增长和对流畅用户界面的更高需求要求更简单的工作流程来创建应用和设备。将UX设计师整合到开发工作流程中是Qt 6系列的目标之一。


Qt6 核心-基本模块

开始QML编程的Qt 6模块的最小集合。

  1. Qt内核-其他模块使用的核心非图形类。
  2. Qt D总线linux上通过D-Bus协议进行进程间通信的类。
  3. Qt GUI-图形用户界面(GUI)组件的基类。包括OpenGL。
  4. Qt网络-类,使网络编程更容易和更可移植。
  5. Qt QML-QML和JavaScript语言的类。
  6. Qt快速-用于构建具有自定义用户界面的高度动态应用程序的声明性框架。
  7. Qt快速控制-提供轻量级QML类型,用于为桌面、嵌入式和移动设备创建高性能用户界面。这些类型采用简单的样式架构,非常高效。
  8. Qt快速布局-布局是用于在用户界面中排列基于Qt Quick 2的项目的项目。
  9. Qt快速测试-QML应用程序的单元测试框架,其中的测试用例是作为JavaScript函数编写的。
  10. Qt试验-单元测试Qt应用程序和库的类。
  11. Qt部件-用C++小部件扩展Qt GUI的类。

Qt6 附加模块

除了基本模块之外,Qt还提供了针对特定目的的附加模块。许多附加模块要么功能完整,向后兼容,要么只适用于某些平台。这里列出了一些可用的附加模块,但是请务必在Qt文档附件列表 (打开新窗口)在下面的列表中。

  • 网络:Qt蓝牙/ Qt网络授权
  • UI组件:Qt快速3D / Qt快速时间线/ Qt图表/ Qt数据可视化/ Qt Lottie动画/ Qt虚拟键盘
  • 制图法:Qt 3D / Qt图像格式/ Qt OpenGL / Qt着色器工具/ Qt SVG / Qt道路合成器
  • 助手:Qt 5核心兼容性API/ Qt并发/ Qt帮助/ Qt打印支持/Qt快速小部件/ Qt SCXML / Qt SQL /
    Qt状态机/ Qt UI工具/ Qt XML

Qt6 支持的平台

Qt支持各种平台,包括所有主要的桌面和嵌入式平台。通过Qt平台抽象,现在如果需要的话,将Qt移植到您自己的平台上比以往任何时候都容易。

在一个平台上测试Qt6非常耗时。Qt项目选择了一个平台子集来构建参考平台集。这些平台通过系统测试进行彻底测试,以确保最佳质量。但是,请记住,没有代码是没有错误的。


Qt6 简介

Qt Quick是Qt 6中使用的用户界面技术的总称。它是在Qt 4中引入的,现在扩展到了Qt 6。Qt Quick本身是几种技术的集合:

  • QML -用户界面标记语言
  • JavaScript——动态脚本语言
  • Qt C++——高度可移植的增强型c++库

<类似于HTML,QML是一种标记语言。它由标记组成,这些标记在Qt Quick中称为类型,用花括号括起来:Item {}。
它完全是为了开发人员创建用户界面、速度和更容易阅读而设计的。使用JavaScript代码可以进一步增强用户界面。使用Qt C++,Qt Quick可以很容易地扩展您自己的原生功能。简而言之,声明式UI称为前端,本机部分称为后端。这允许您将应用程序的计算密集型和本机操作与用户界面部分分开。

在典型的项目中,前端是用QML/JavaScript开发的。后端代码是使用Qt C++开发的,它与系统进行交互,并完成繁重的工作。这允许更面向设计的开发人员和功能性开发人员之间的自然分离。通常,后端使用Qt Test(Qt单元测试框架)进行测试,并导出供前端开发人员使用。

Qt6 消化用户界面

让我们使用Qt Quick创建一个简单的用户界面,它展示了QML语言的一些方面。最终,我们将拥有一个带旋转叶片的纸风车。
在这里插入图片描述
我们从一个名为main.qml。我们所有的QML文件都会有这个后缀.qml。作为一种标记语言(像HTML),QML文档需要有且只有一个根类型。在我们的例子中,这是Image键入基于背景图像几何图形的宽度和高度:

import QtQuickImage {id: rootsource: "images/background.png"
}

因为QML没有限制根类型的类型选择,所以我们使用Image键入source属性设置为我们的背景图像作为根。
在这里插入图片描述

每种类型都有属性。例如,图像具有以下属性widthheight,每个保存一个像素计数。它还具有其他属性,例如source。因为图像类型的大小是从图像大小自动派生的,所以我们不需要设置width和height我们自己的财产。

最标准的类型位于QtQuick模块,该模块由.qml文件。

id是一个特殊的可选属性,它包含一个标识符,该标识符可用于引用文档中其他位置的关联类型。重要提示:安id属性在设置后不能更改,也不能在运行时设置。使用root因为根类型的id是本书中使用的一个约定,使得在较大的QML文档中引用最顶层的类型是可预测的。

前景元素表示用户界面中的杆和风车,作为单独的图像包含在内。
在这里插入图片描述
在这里插入图片描述
我们希望将杆子水平放置在背景的中心,但垂直向底部偏移。我们想把风车放在背景的中间。

虽然这个初学者的例子只使用了图像类型,但是随着我们的进步,你将会创建由许多不同类型组成的更复杂的用户界面。

Image {id: root...Image {id: poleanchors.horizontalCenter: parent.horizontalCenteranchors.bottom: parent.bottomsource: "images/pole.png"}Image {id: wheelanchors.centerIn: parentsource: "images/pinwheel.png"}...
}

为了将风车放在中间,我们使用了一个复杂的属性,称为anchor。锚定允许您指定父对象和同级对象之间的几何关系。例如,将我置于另一类型的中心(anchors.centerIn: parent).两端有左、右、上、下、居中、填充、垂直居中和水平居中关系。自然地,当两个或更多的锚点一起使用时,它们应该互补:例如,将一个类型的左侧锚定到另一个类型的顶部是没有意义的。

对于风车,锚定只需要一个简单的锚。

有时您会想要做一些小的调整,例如,将文字稍微移离中心。这可以通过anchors.horizontalCenterOffset或与anchors.verticalCenterOffset。类似的调整属性也可用于所有其他锚点。有关锚点属性的完整列表,请参考文档。

将图像作为我们的根类型的子类型(即Image)说明了声明性语言的一个重要概念。您按照层和分组的顺序描述用户界面的视觉外观,其中首先绘制最顶层(我们的背景图像),然后在包含类型的局部坐标系中,在它的顶部绘制子层。

为了让展示更加有趣,让我们让场景互动起来。这个想法是当用户在场景中的某个地方按下鼠标时旋转轮子。

我们使用MouseArea类型,并使其覆盖我们的根类型的整个区域。

Image {id: root...MouseArea {anchors.fill: parentonClicked: wheel.rotation += 90}...
}

当用户在其覆盖的区域内单击时,鼠标区域会发出信号。您可以通过重写onClicked功能。当一个信号被连接时,意味着每当信号被发出时,它所对应的函数(或多个函数)被调用。在这种情况下,我们说当在鼠标区域有鼠标点击时,类型的idwheel(即风车图像)应该旋转+90度。

这种技术适用于每一种信号,命名惯例是on + SignalName在标题情况下。此外,所有属性在其值更改时都会发出信号。对于这些信号,命名惯例是:

`on${property}Changed`

例如,如果一个width属性被更改,您可以用onWidthChanged: print(width).

现在,每当用户点击时,滚轮就会旋转,但旋转发生在一次跳跃中,而不是随着时间的推移而流动。我们可以使用动画来实现流畅的移动。动画定义了一段时间内属性如何发生变化。为了实现这一点,我们使用Animation调用了类型的属性Behavior。这Behavior为定义的属性指定动画,以显示应用于该属性的每个更改。换句话说,每当属性改变时,动画就会运行。这只是QML制作动画的众多方式之一。

Image {id: rootImage {id: wheelBehavior on rotation {NumberAnimation {duration: 250}}}
}

现在,每当轮子的旋转属性改变时,将使用NumberAnimation持续时间为250毫秒,所以每个90度的转弯需要250毫秒,产生一个漂亮平滑的转弯。
在这里插入图片描述

你实际上不会看到车轮模糊。这只是表示旋转。(一个模糊的轮子在“资源”文件夹中,如果你想尝试一下的话。)

现在,滚轮看起来更好了,表现也很好,并且提供了一个关于Qt快速编程如何工作的非常简单的见解。


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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

402 · 连续子数组求和

链接&#xff1a;LintCode 炼码 - ChatGPT&#xff01;更高效的学习体验&#xff01; 题解&#xff1a; 九章算法 - 帮助更多程序员找到好工作&#xff0c;硅谷顶尖IT企业工程师实时在线授课为你传授面试技巧 九章算法 - 帮助更多程序员找到好工作&#xff0c;硅谷顶尖IT企业…

项目配置日志的打印目录,输出日志

最近的项目需要在服务器上跑&#xff0c;配个日志方便查看。简单记录一下&#xff0c; resources下新增日志配置的xml文件&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <configuration scan"true" scanPeriod"10 seco…

idea连接远程MySQL数据库

填写URL&#xff0c;以mysql为例 格式 jdbc:mysql://ip地址:端口号/数据库名 jdbc:mysql://127.0.0.1:3306/ldentification _Information

MATLAB的num2str,把循环变量作为字符串的内容

MATLAB的num2str&#xff0c;把循环变量作为字符串的内容 输入代码&#xff1a; i 2; abc [sdfg,num2str(i),dsfg]运行结果&#xff1a; 解析&#xff1a; MATLAB里面的[ ]是会把元素组合的意思 现在有&#xff1a; a1 3; a2 4; a3 5; 然后我想通过for循环&#xff0c;循…

RV1126笔记三十八:PaddleOCR部署到RV1126

若该文为原创文章&#xff0c;转载请注明原文出处。 一、环境 1、硬件&#xff1a;正点原子RV1126开发板 2、环境&#xff1a;ubuntu16.04 二、模型转换 训练后的模型不能直接使用在RV1126,需要转换一下模型 1、PaddlePaddle的模型转成推理模型 在前面有提过了&#xf…

InnoDB: Waiting for page_cleaner to finish flushing of buffer pool 解决方案

这个是因为linux系统时间&#xff0c;Mysql数据库时间&#xff0c;Mysql日志时间出现不一致导致的。 1、date -R 查询linux系统时间 中国标准时区东八区时区 2、mysql数据库的时间 3、在mysql的配置文件里面&#xff0c;定义好时间&#xff0c;时区一致。 问题解决。

Blender基础入门(0):下载和资源

文章目录 我个人的Blender专栏前言相关资料Blender和C4D如何选择视频资源BlenderBlender官网下载基础设置常用快捷键介绍空格键&#xff1a;跳出选择框ShiftA&#xff1a;跳出添加框选中物体按F9:显示物体属性 Blender能做到什么总结 我个人的Blender专栏 Blender简单教学 前…

【深度学习】受限玻尔兹曼机 (RBM) 初学者指南

一、说明 受限玻尔兹曼机&#xff08;Restricted Boltzmann Machine&#xff0c;RBM&#xff09;是一种基于能量模型的人工神经网络。它只有一个隐层&#xff0c;将输入层和隐层中的每个神经元互相连接&#xff0c;但不同层的神经元之间没有连接。RBM是一种无向的概率图模型&am…

一份非常牛逼的计算机相关技术资料整理

最近发现GitHub上一个非常牛逼的项目。作者收录了一整套 计算机相关的技术资料整理。 收录内容包括&#xff0c;但不仅仅包括&#xff0c;比如比较实用的计算机相关技术书籍&#xff0c;可以在短期之内入门的简单实用教程、一些技术网站以及一些写的比较好的博文。真的得给作者…

2023CCF CAT- 热身赛

NOIP普及组 字符串 排序2017 动态规划 递推 USACO 2001 贪心 牛客小白月赛12 说实话还是很喜欢打比赛&#xff0c;喜欢AC的感觉&#xff0c;但是这玩意咋越来越难了那。。。。。 扎心了&#xff0c;不是~~~~~ 当个爱好吧&#xff0c;还是很喜欢当年打比赛和队友相视一笑的样子…

WebGIS 信息系统-Element项目实战

WebGIS 信息系统-Element项目实战 Element的安装OpenLayers的安装采用直接引用的方式配置开发环境下载Vue文件下载Element文件下载OpenLayers文件 Element的安装 在项目的根目录中&#xff0c;首先按下 Shift鼠标右键&#xff0c;在弹出的右键菜单中选择“在此处打开命令行窗口…

libdrm编译调试

本文主要介绍libdrm的代码下载、编译和调试的工作。新版本的libdrm不再采用configure && make的方式编译&#xff0c;而是改用meson && ninja编译方式&#xff0c;近些年很多多媒体的开源软件包的构建系统有向后者靠拢的趋势&#xff0c;典型的比如gstream及其…

English Learning - L3 作业打卡 Lesson8 Day59 2023.7.4 周二

English Learning - L3 作业打卡 Lesson8 Day59 2023.7.4 周二 引言&#x1f349;句1: I started snowboarding, then I went back to work, then I went back to school.成分划分连读爆破语调 &#x1f349;句2: And just this past February, I won two back to back World C…

视频编码流程 YUV数据编码为H264数据

文章目录 1.视频编码流程2.实战demo3.相关编码知识点讲解1. 参数设置问题:2. 关于av_opt_set3. 关于码流设置 1.视频编码流程 2.实战demo #ifndef MAINBACK_C #define MAINBACK_C #endif // MAINBACK_C #include <stdint.h> #include <stdio.h> #include <stdl…

Go内存分配那些事,就这么简单!

这篇文章主要介绍Go内存分配和Go内存管理&#xff0c;会轻微涉及内存申请和释放&#xff0c;以及Go垃圾回收。 从非常宏观的角度看&#xff0c;Go的内存管理就是下图这个样子&#xff0c;我们今天主要关注其中标红的部分。 本文基于go1.11.2&#xff0c;不同版本Go的内存管理可…

Linux驱动开发:Linux内核启动流程详解

前言&#xff1a;Linux 内核同样作为 Linux 驱动开发的 “三巨头” 之一&#xff0c;Linux 内核的启动流程要比 uboot 复杂的多&#xff0c;涉及到的内容也更多。但秉持着 “知其然知其所以然” 的学习态度&#xff0c;作者将给读者朋友大致的过一遍 Linux 内核的启动流程。(考…

Java csv文件上传下载中的相关转换

目录 一. 需求二. List<Entity>转List<List<String>>2.1 实体类2.2 转换 三. 上传csv文件转List<Map>3.1 csv文件3.2 前台3.3 实体类3.4 转换3.5 效果 一. 需求 &#x1f914;项目中遇到了两个需求 1.查询数据库&#xff0c;得到List<Entity>这…

初阶C语言———操作符详解(2)

hello&#xff0c;我们又见面了&#xff0c;今天我们把操作符这一章节完结&#xff0c;那让我们一起来学习吧 逻辑操作符 &&逻辑与 ||逻辑或 这里我们要区分按位与和按位或还有逻辑与和逻辑或的区分。 1&2----->0 1&&2---->1 1|2----->3 1||2---…

嵌入式_Keil (MDK - ARM) 的调试步骤

目录 1. 编译 调试 2. 复位 全速运行 3. 单步调试 4. 逐步调试 5. 跳出调试 6. 运行到光标处 7. 跳转到暂停行 8. 调试窗口 首先为什么需要在 MDK 中进行程序的调试呢&#xff1f; 在 MDK 中进行程序调试的主要目的是识别和解决程序中的问题和错误。 比如说找到程序中…

【CANopen】周立功轻松入门CANopen笔记

前言 想学习些新东西了&#xff0c;原本想直接学学Ethercat&#xff0c;但是简单看了看对象字典啥的概念一头雾水的&#xff0c;决定先从CANopen开始&#xff0c;Ethercat看着头疼。Etehrcat和CANopen有挺多类似的地方。感谢ZLG的这个入门笔记&#xff0c;我似乎是看懂了些&am…