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

news2024/9/20 22:46:14

文章目录

  • 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 QtQuick

Image {
    id: root
    source: "images/background.png"
}

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

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

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

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

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

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

Image {
    id: root
    ...
    Image {
        id: pole
        anchors.horizontalCenter: parent.horizontalCenter
        anchors.bottom: parent.bottom
        source: "images/pole.png"
    }

    Image {
        id: wheel
        anchors.centerIn: parent
        source: "images/pinwheel.png"
    }
    ...
}

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

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

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

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

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

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

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

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

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

`on${property}Changed`

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

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

Image {
    id: root
    Image {
        id: wheel
        Behavior on rotation {
            NumberAnimation {
                duration: 250
            }
        }
    }
}

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

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

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


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

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

相关文章

插值查找(思路+代码)

变量和二分查找差不多&#xff0c;但是公式变了 公式&#xff1a; int mid left (right - left) * (indexValue -arr[left]) / ( arr[right] - arr[left]) 注意事项&#xff1a; 适用于数据量比较大&#xff0c;数据分布均匀的数据 代码&#xff1a; package search;impor…

回归预测 | MATLAB实现WOA-CNN鲸鱼算法优化卷积神经网络的数据多输入单输出回归预测

回归预测 | MATLAB实现WOA-CNN鲸鱼算法优化卷积神经网络的数据多输入单输出回归预测 目录 回归预测 | MATLAB实现WOA-CNN鲸鱼算法优化卷积神经网络的数据多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 回归预测 | MATLAB实现WOA-CNN鲸鱼算法优化卷积…

34.RocketMQ之Broker端消息存储流程详解

highlight: arduino-light Broker消息存储概要设计 RocketMQ主要存储的文件包括Commitlog文件&#xff0c;ConsumeQueue文件&#xff0c;IndexFile文件。 RMQ把所有主题的消息存储在同一个文件中&#xff0c;确保消息发送时顺序写文件。 为了提高消费效率引入了ConsumeQueue消息…

Android studio 引入不了R包,手动引入显示红色。可以跑起来却没问题

之前在这个问题踩坑2次&#xff0c;遂记录一下。 问题是&#xff1a;工程里找不到自己包名的R&#xff0c;手动导入显示红色&#xff0c;Run起来倒是没问题 尝试过Clean&#xff0c;Rebuild&#xff0c;清缓存&#xff0c;重启&#xff0c;都没用。 最终发现是没有在 Android…

gitlab:(二)gitlab注册用户和邀请进入项目的问题

.新注册用户无法在管理员界面激活 在管理员界面无法进行管理&#xff0c;找不到相关的操作界面 当前gitlab版本 尝试降低gitlab版本 卸载之后删除残留文件 安装指定的低版本&#xff1a;gitlab-ce-12.7.5-ce.0.el7.x86_64.rpm yum install policycoreutils openssh-server op…

网络应用基础ENSP环境的安装(NETBASE第三课)

网络应用基础ENSP环境的安装(NETBASE第三课) eNSP(Enterprise Network Simulation Platform)是一款由华为提供的、可扩展的、图形化操作的网络仿真工具平台&#xff0c;主要对企业网络路由器、交换机进行软件仿真&#xff0c;完美呈现真实设备实景&#xff0c;支持大型网络模拟…

Markdown编辑器Vditor的基本使用以及在Vue3中使用

介绍 官网 GitHub 帮助文档 Vditor是一个Markdown编辑器组件&#xff08;也支持富文本编辑器&#xff09;&#xff0c;可以嵌入到自己的Web应用中。 此Markdown编辑器支持三种模式&#xff08;几乎没有一个Markdown编辑器同时支持这三种模式&#xff09;&#xff1a; 所见即所…

基于matlab消除视频流中摄像机运动的影响(附源码)

一、前言 此示例演示如何从视频流中删除摄像机运动的影响。 在此示例中&#xff0c;我们首先定义要跟踪的目标。在这种情况下&#xff0c;它是汽车的后部和车牌。我们还建立了一个动态搜索区域&#xff0c;其位置由最后一个已知的目标位置确定。然后&#xff0c;我们仅在此搜…

ChatGPT引导下的编程起航:零基础学会Python编程(ChatGPT版)

&#x1f482; 个人网站:【海拥】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 目录 前言如何使用 ChatGPT对…

【C++】C++11之线程库

一、thread类 在 C11 之前&#xff0c;涉及到多线程问题&#xff0c;都是和平台相关的&#xff0c;比如 windows 和 linux 下各有自己的接 口&#xff0c;这使得代码的可移植性比较差 。 C11 中最重要的特性就是对线程进行支持了&#xff0c;使得 C 在 并行编程时不需要依赖第三…

刚发offer,明天就让上班!原公司离职手续还没办,说晚两天报到,hr竟取消offer,录用其他人!...

这年头找工作有多难&#xff1f;一位网友吐槽&#xff1a;一瞬间从天堂掉进地狱&#xff01; 楼主说&#xff0c;hr今天刚发了offer&#xff0c;就让明天来上班。自己说明天不可能&#xff0c;原公司离职手续还没办完&#xff0c;hr就取消了offer&#xff0c;转而录用了其他候选…

MySQL基本查询与内置函数

目录 聚合函数 分组查询 内置函数 日期函数 字符串函数 数学函数 聚合函数 COUNT&#xff1a;返回查询到的数据的数量 SUM&#xff1a;返回查询到的数据的总和&#xff08;数字&#xff09; AVG&#xff1a;返回数据的平均值 MAX&#xff1a;返回查询到的数据的最大值 MIN&a…

毫米波雷达系列 | 毫米波雷达测角原理-补档

毫米波雷达测角原理 角度分辨率 当估算角度分辨率最少需要两个RX天线&#xff0c;利用的是物体相对每个天线的差分距离。 假设雷达具有一个发射天线TX和两根接受天线RX1和RX2之间的间距为d&#xff0c; θ \theta θ为目标相对天线的角度&#xff0c;那么接受天线之间的相位…

OpenCV 入门教程:颜色空间转换

OpenCV 入门教程&#xff1a;颜色空间转换 导语一、颜色空间的基本概念1.1 RGB颜色空间1.2 灰度颜色空间1.3 其他颜色空间 二、颜色空间转换三、示例应用3.1 提取图像的色彩通道3.2 调整图像的亮度和对比度 总结 导语 在图像处理和计算机视觉领域&#xff0c;颜色空间转换是一…

学无止境·MySQL③

单表查询 题一创建表并插入数据薪水修改为5000将姓名为张三的员工薪水修改为3000元将姓名为李四的员工薪水修改为4000元&#xff0c;gener改为女 题一 1.创建表&#xff1a; 创建员工表employee&#xff0c;字段如下&#xff1a; id&#xff08;员工编号&#xff09;&#xff…

CVE 官网提交流程

CVE 官网提交流程 一、进入官网申请 https://cveform.mitre.org/ 选择申请CVE ID即可。 Vulnerability type翻译&#xff08;chatgpt-3.5&#xff09;buffer overflow缓冲区溢出是一种软件漏洞&#xff0c;攻击者在向缓冲区写入超出其容量的数据时&#xff0c;可能导致数据覆…

一文搞懂常见的加密算法

加密算法在互联网技术领域中几乎是无处不在&#xff0c;而密码学也是网络安全的重要基础&#xff0c;这篇文章我们就一起来学习下常见的加密算法。 1 为什么要研究加密算法&#xff1f; 在技术方面&#xff0c;加密算法的研究具有重要的意义&#xff0c;主要体现在以下几个方…

【LeetCode】HOT 100(25)

题单介绍&#xff1a; 精选 100 道力扣&#xff08;LeetCode&#xff09;上最热门的题目&#xff0c;适合初识算法与数据结构的新手和想要在短时间内高效提升的人&#xff0c;熟练掌握这 100 道题&#xff0c;你就已经具备了在代码世界通行的基本能力。 目录 题单介绍&#…

从零开始 Spring Boot 66:JPA 查询参数

从零开始 Spring Boot 66&#xff1a;JPA 查询参数 图源&#xff1a;简书 (jianshu.com) JPA 的查询参数分为两种&#xff1a; 命名参数&#xff08;Named Parameters&#xff09;位置参数&#xff08;Positional Parameters&#xff09; 类似于 Python 中的函数的位置参数和…

Linux的网络配置与远程连接与文件传输

&#xff08;该图由AI绘制 关注我 学习AI画图&#xff09; 目录 网络配置 1、ifconfig查看网络信息 2、与网卡相关的配置文件 3、查询计算机的网络状态 4、systemctl启动/重启/停止网络 Linux远程连接与文件传输 1、为什么需要远程连接 2、SSH协议 3、sshd服务 4、…