当前位置: 首页 > news >正文

QML学习(六) anchors锚点和坐标,以及anchors锚点的使用

先来看看上一篇文章中的代码和效果
在这里插入图片描述
上一篇中讲到,第一个QML程序虽然做出来了,但程序界面里边元素的显示位置跟预想的不一样,这其实就是整体上对QML中的坐标使用存在问题。
改成这样,全以锚点来控制各个元素的坐标

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.12Window {visible: truewidth: 400height: 200//改掉标题title: qsTr("测试程序")//添加个矩形Rectangle {id: rectanglewidth: 180height: 80color: "red"border.color: "blue"anchors.top: parent.topanchors.rightMargin: 10}//再添加个矩形Rectangle {id: rectangle2width: 180height: 80color: "red"border.color: "blue"anchors.top: parent.topanchors.left: rectangle.right+20anchors.right: parent.right}//添加一行文字Text {id: myTextwidth: 200height: 40text: "Hello, QML!"font.pointSize: 26anchors.top: rectangle.bottom}Button{id: myButtontext: "Click Me"anchors.top:  myText.bottomanchors.bottom: parent.bottomanchors.topMargin: 20onClicked: {console.log("Button clicked!");}}
}

效果就会变成这样:
在这里插入图片描述

整个Window里边,按照从上到下,从左到右,依次加入两个方框,一串文字,一个按钮,全部使用anchors锚点。

今天这篇主要介绍QML中元素的坐标,以及anchors瞄点的使用。
先来说一下QML中的坐标系统。
QML中的坐标系统通常是一个基于屏幕像素的二维笛卡尔坐标系。坐标系的原点(0,0)通常位于界面的左上角,X轴向右延伸,Y轴向下延伸。每个QML元素(如Rectangle、Image等)都有自己的局部坐标系,该坐标系以元素的左上角为原点。

Rectangle {width: 100height: 100x: 50   // 从父元素的左边缘向右移动50个像素y: 50   // 从父元素的上边缘向下移动50个像素color: "blue"
}

像上面例子里这种,就是给元素的x,y赋值来决定该元素在父元素中的坐标位置(注意:是他所在父元素中的坐标位置,也就是相对坐标,不是整个屏幕的绝对位置,这里要理解清楚绝对坐标相对坐标)。这种全程以坐标来控制元素的位置肯定也可以,但这样写的话,遇到元素比较多,界面比较复杂的情况就很头疼,这时候大家就会引入anchors瞄点的应用,并结合一些布局,来完成整页界面的设计分布。

接下来说一下anchors瞄点的使用,来控制元素的位置。先来看一个示例:

import QtQuick 2.0Rectangle {width: 200;height: 200;color: "red"Rectangle {width: 100;height: 100;color: "blue"// 使用 anchors 锚点将蓝色矩形的左边与父矩形的左边对齐anchors.left: parent.left;// 将蓝色矩形的顶部与父矩形的顶部对齐anchors.top: parent.top;// 为蓝色矩形的左边添加一个偏移量 20 像素anchors.leftMargin: 20;// 为蓝色矩形的顶部添加一个偏移量 20 像素anchors.topMargin: 20;}
}

在这个 QML 示例中,我们有一个父 Rectangle 和一个子 Rectangle。
对于子矩形(蓝色),我们使用 anchors.left: parent.left 将其左边与父矩形的左边对齐。这意味着子矩形的左边缘将与父矩形的左边缘在同一垂直位置。
类似地,使用 anchors.top: parent.top 将子矩形的顶部与父矩形的顶部对齐,使子矩形的上边缘与父矩形的上边缘在同一水平位置。
anchors.leftMargin: 20 为子矩形的左边添加了一个 20 像素的偏移量。这会将子矩形从父矩形的左边缘向右移动 20 像素。
anchors.topMargin: 20 为子矩形的顶部添加了一个 20 像素的偏移量,将子矩形从父矩形的上边缘向下移动 20 像素。
以下是另一个更复杂的示例,展示了多个锚点的使用:

import QtQuick 2.0Rectangle {width: 300;height: 300;color: "yellow"Rectangle {width: 150;height: 150;color: "green"// 将绿色矩形的右边与父矩形的右边对齐anchors.right: parent.right;// 将绿色矩形的底部与父矩形的底部对齐anchors.bottom: parent.bottom;// 右边偏移量为 30 像素anchors.rightMargin: 30;// 底部偏移量为 30 像素anchors.bottomMargin: 30;// 水平居中对齐,与父矩形的水平中心对齐anchors.horizontalCenter: parent.horizontalCenter;// 垂直居中对齐,与父矩形的垂直中心对齐anchors.verticalCenter: parent.verticalCenter;}
}

代码解释:
对于这个示例中的子矩形(绿色):
anchors.right: parent.right 使子矩形的右边缘与父矩形的右边缘对齐。
anchors.bottom: parent.bottom 使子矩形的底部与父矩形的底部对齐。
anchors.rightMargin: 30 会将子矩形从父矩形的右边缘向左偏移 30 像素。
anchors.bottomMargin: 30 会将子矩形从父矩形的底部向上偏移 30 像素。
anchors.horizontalCenter: parent.horizontalCenter 使子矩形的水平中心与父矩形的水平中心对齐,保证在水平方向上处于中心位置(考虑了之前的偏移)。
anchors.verticalCenter: parent.verticalCenter 使子矩形的垂直中心与父矩形的垂直中心对齐,保证在垂直方向上处于中心位置(考虑了之前的偏移)。
通过使用 anchors,可以方便地将一个元素相对于另一个元素进行定位,而不需要使用 x 和 y 坐标,这样可以让布局更加灵活和动态,尤其在处理不同屏幕尺寸和分辨率时。例如,在用户调整窗口大小时,使用锚点定位的元素会根据其锚定的父元素或其他元素自动调整位置,而使用 x 和 y 坐标定位的元素可能不会自动调整,除非手动编写代码来处理。
anchors 还支持更多的属性,例如:
anchors.fill:可以让子元素填充父元素的全部空间。
anchors.before 和 anchors.after:可以根据元素在布局中的前后顺序进行定位。
anchors.centerIn:可以将元素居中在另一个元素内。

现在总结一下:
在 QML 中,anchors(锚点)是一种强大的布局机制,它允许你将一个元素的边界与另一个元素的边界关联起来,从而实现灵活和动态的布局。以下是 anchors 的主要属性:
1、基本锚点属性:
anchors.left:将元素的左边界与另一个元素的左边界连接。
anchors.right:将元素的右边界与另一个元素的右边界连接。
anchors.top:将元素的上边界与另一个元素的上边界连接。
anchors.bottom:将元素的下边界与另一个元素的下边界连接。
2、偏移属性:
anchors.leftMargin:元素左边界相对于其锚定元素左边界的偏移量。
anchors.rightMargin:元素右边界相对于其锚定元素右边界的偏移量。
anchors.topMargin:元素上边界相对于其锚定元素上边界的偏移量。
anchors.bottomMargin:元素下边界相对于其锚定元素下边界的偏移量。
3、中心锚点属性:
anchors.horizontalCenter:将元素的水平中心与另一个元素的水平中心连接。
anchors.verticalCenter:将元素的垂直中心与另一个元素的垂直中心连接。
anchors.centerIn:将元素的中心置于另一个元素的中心。
4、填充属性:
anchors.fill:使一个元素填充另一个元素,即元素将占据其锚定元素的全部空间。
5、相对位置属性:
anchors.baseline:将元素的基线与另一个元素的基线连接,通常用于文本元素,将当前元素的基线与另一个元素的基线绑定,确保文本元素在垂直方向上按照文本基线对齐

估计大家也发现了,有时候你设置了一些元素的宽高但并没有生效,这种情况往往就是一些坐标位置,锚点控制,布局管理中,出现了优先级冲突。下来说下anchors锚点的优先级:
一、显式指定的优先级高于隐式布局规则:
当你使用 anchors 属性明确指定了元素的位置和尺寸约束时,这些明确的约束通常会优先于其他隐式的布局规则。例如,如果你同时使用 anchors.left 和 anchors.right 来确定元素的宽度,它将优先于元素的 width 属性或 implicitWidth。
二、多个锚点之间的优先级:
一般情况下,当设置多个锚点时,它们的优先级通常是根据它们的设置顺序和具体情况而定,但遵循一些基本的原则:
1.水平方向的优先级:在水平方向上,如果同时设置了 anchors.left 和 anchors.right 以及 width,通常 anchors.left 和 anchors.right 的组合将优先,因为它们更明确地定义了元素的水平范围;
2.垂直方向的优先级:对于垂直方向,如果同时设置了 anchors.top 和 anchors.bottom 以及 height,anchors.top 和 anchors.bottom 的组合会优先;

Rectangle {width: 100; height: 100; color: "red"Rectangle {// 蓝色矩形的高度将由 top 和 bottom 锚点决定anchors.top: parent.topanchors.bottom: parent.bottomcolor: "blue"}
}

蓝色矩形的高度将由 anchors.top 和 anchors.bottom 确定,会拉伸以填满父元素的上下边界,而不是使用 height 设定的尺寸。
3.中心锚点与边界锚点的优先级:当同时使用中心锚点(anchors.horizontalCenter 和 anchors.verticalCenter)和边界锚点时,一般来说,边界锚点会更优先,因为它们提供了更明确的位置信息;
4.填充属性的优先级:anchors.fill 是一个非常强大的属性,当设置了 anchors.fill 时,它通常会优先于其他锚点设置,因为它的目的是使元素填充另一个元素的全部空间;
5.边距属性的优先级:边距属性(anchors.leftMargin、anchors.rightMargin 等)会在相应的锚点属性之后起作用,用于调整元素与锚定元素之间的距离。它们不会改变锚点所确定的元素位置的基本关系,只是在已有的位置关系上添加偏移,相当于叠加了两个设置的属性;

Rectangle {width: 100; height: 100; color: "red"Rectangle {// 蓝色矩形根据 left 锚点定位,并添加左偏移anchors.left: parent.leftanchors.leftMargin: 20color: "blue"}
}

如上例子中,anchors.leftMargin 在 anchors.left 确定的位置基础上,将蓝色矩形向左偏移 20 像素。

相关文章:

QML学习(六) anchors锚点和坐标,以及anchors锚点的使用

先来看看上一篇文章中的代码和效果 上一篇中讲到,第一个QML程序虽然做出来了,但程序界面里边元素的显示位置跟预想的不一样,这其实就是整体上对QML中的坐标使用存在问题。 改成这样,全以锚点来控制各个元素的坐标 import QtQuic…...

BFS广度优先搜索详解

对于BFS的,我来谈一谈自己的理解。首先,我们从一道最基础的题来进行学习: 洛谷B3625 迷宫寻路(仔细阅读哦,我就不解释了) B3625 迷宫寻路 - 洛谷 | 计算机科学教育新生态 对于这道题以及所有的BFS题目的核心&#x…...

vue项目利用webpack进行优化案例

使用 Webpack 优化 Vue 项目是提升性能和减少打包体积的关键步骤。以下是几个常见的优化案例及其详细实现方法: 1. 优化打包大小 1.1 按需加载 (Lazy Loading) Vue 提供了路由懒加载功能,可以将组件拆分成独立的块,按需加载,从而…...

如何单独安装 MATLAB 工具箱

很多时候由于 MATLAB 太大而选择安装一些 Toolbox,但用着用着发现要用到某个没有安装的 Toolbox,这时候就需要再单独安装这个 Toolbox,下面提供两种方法。 本文以安装 系统辨识工具箱 System Identification Toolbox 为例。 方法一&#xf…...

组网实训实现

小型单元网络实现 IP划分: 外网:172.1.1.0/24 172.1.2.0/24 内网:基于192.168.3.0/24的子网划分 综合办公楼:192.168.3.00 000000 /26(192.168.3.0-192.168.3.63) 综合一楼:192.168.3.0000 0000 /28&…...

openbmc sdk09.03 适配(一)

1.说明 本节是根据最新的sdk09.03适配ast2600平台。 sdk下载路径为: https://github.com/AspeedTech-BMC/openbmc可参阅文档: https://blog.csdn.net/wit_yuan/article/details/144613247nfs挂载方法: # mount -o nolock -t nfs serverip:/xx...

SQL使用存储过程

本文介绍什么是存储过程,为什么要使用存储过程,如何使用存储过程,以及创建和使用存储过程的基本语法。 1. 存储过程 迄今为止,我们使用的大多数SQL语句都是针对一个或多个表的单条语句。并非所有操作都这么简单,经常…...

C语言----函数、指针、数组

目录 ​编辑 指针函数 本质 格式: 函数指针 1、 概念 2、 格式 3、 举例 3.1基本用法 3.2函数指针作为函数参数的用法(回调函数) 函数指针数组 1. 概念 2. 格式 3. 例子 指针函数 本质 是函数,返回值为指针 格式: 数据类型…...

基于Java的敬老院管理系统的设计和实现【源码+文档+部署讲解】

基于Java的敬老院管理系统设计和实现 摘 要 新世纪以来,互联网与计算机技术的快速发展,我国也迈进网络化、集成化的信息大数据时代。对于大众而言,单机应用早已成为过去,传统模式早已满足不了当下办公生活等多种领域的需求,在一台电脑上不联网的软件少之又少&#x…...

12306分流抢票软件 bypass v1.16.43 绿色版(春节自动抢票工具)

软件介绍 12306Bypass分流抢票软件,易操作强大的12306抢票软件,全程自动抢票,云识别验证码打码,多线程秒单、稳定捡漏,支持抢候补票、抢到票自动付款,支持多天、多车次、多席别、多乘客、短信提醒等功能。…...

【数据仓库】hadoop3.3.6 安装配置

文章目录 概述下载解压安装伪分布式模式配置hdfs配置hadoop-env.shssh免密登录模式设置初始化HDFS启动hdfs配置yarn启动yarn 概述 该文档是基于hadoop3.2.2版本升级到hadoop3.3.6版本,所以有些配置,是可以不用做的,下面仅记录新增操作&#…...

小试牛刀-SpringBoot集成SOL链

目录 一、什么是solanaj? 二、Pom依赖 三、主要类 3.1 RpcClient 3.2 PublicKey 3.3 Transaction 3.4 TransactionInstruction 四、示例代码 Welcome to Code Blocks blog 本篇文章主要介绍了 [小试牛刀-SpringBoot集成SOL链] ❤博主广交技术好友,喜欢文章的…...

批量插入报错: No value specified for parameter

先上代码和xml文件: 错误: ### Cause: java.sql.SQLException: No value specified for parameter 9 ; bad SQL grammar []; nested exception is java.sql.SQLException: No value specified for parameter 9代码: List<HwcListingData> theList new ArrayList<&g…...

VSCode设置ctrl或alt+mouse(left)跳转

总结&#xff1a; &#xff08;1&#xff09;VSCode初次远程连接服务器时&#xff0c;需要在服务器上下载 python 拓展&#xff0c;然后选择对应的环境 &#xff08;2&#xff09;VSCode设置ctrl或altmouse(left)跳转到定义...

Crosslink-NX应用连载(12):如何复用特殊功能管脚

作者&#xff1a;Hello,Panda 大家早上好。 昨天有朋友私信我&#xff0c;如何复用Crosslink-NX的特殊功能引脚如PROGRAMN、DONE、INITN诸如这些。熊猫君在这里简单介绍下&#xff1a; 以LIFCL-33U-8CTG104C为例&#xff0c;我们建立一个简单的指示灯LED周期闪烁的工程&…...

‘元素.style.样式名‘获取不到样式,应该使用Window.getComputedStyle()获取正真的样式

一、问题描述 有一次&#xff0c;想通过js获取一个元素的样式的某个属性状态而去执行不同的逻辑代码&#xff0c;结果发现获取的样式总是不对&#xff0c;基本为空。&#xff08;通过元素.style.样式名的方式去获取。&#xff09; 通过打印发现&#xff0c;所有的属性均存在&…...

双目视觉:reprojectImageTo3D函数

前言 reprojectImageTo3D 是 OpenCV 中用于从视差图生成三维点云的函数。它的原理是利用视差图和相机的校准参数&#xff0c;通过三角测量法&#xff0c;计算每个像素对应的三维坐标。以下内容根据源码分析所写&#xff0c;觉得可以的话&#xff0c;点赞收藏哈&#xff01;&am…...

Arduino Uno简介与使用方法

目录 一、Arduino Uno概述 1. 硬件特性 2. 开发环境 二、Arduino Uno的基本使用方法 1. 硬件连接 2. 软件编程 三、Arduino Uno编程基础 1. 基本语法 2. 常用函数 四、Arduino Uno应用举例 1. LED闪烁 2. 温度检测 3. 超声波测距 五、Arduino Uno的扩展与应用 1…...

深入了解 StarRocks 表类型:解锁高效数据分析的密码

在当今数字化浪潮下&#xff0c;大数据分析成为企业决策、优化业务流程的关键利器。StarRocks 作为一款备受瞩目的高性能分析型数据库&#xff0c;其多样化的表类型为复杂的数据处理需求提供了精准解决方案。今天&#xff0c;就让我们一同深入探索 StarRocks 中的主键表、明细表…...

L27.【LeetCode笔记】2 的幂(五种解法)

目录 1.题目 2.自解 方法1:调用log函数 代码 提交结果 方法2:循环 提交结果 3.优解 方法3:位运算n & (n-1) 0 代码 提交结果 方法4:位运算lowbit 代码 提交结果 4.投机取巧的方法 代码 提交结果 1.题目 https://leetcode.cn/problems/power-of-two/?env…...

Pentaho Kettle迁移至Oracle的空字符串和NULL的问题处理,大坑!

一、问题说明 在使用 Kettle 将 DB2 数据迁移到 Oracle 的过程中&#xff0c;出现了 DB2 中为空字符串的字段&#xff0c;在插入到 Oracle 过程中实际插入的为 NULL &#xff0c;导致触发了非空校验而迁移失败 空字符串 ‘’ &#xff0c;即长度为0的字符串 搜索该问题后得知…...

「Mac畅玩鸿蒙与硬件50」UI互动应用篇27 - 水果掉落小游戏

本篇教程将带你实现一个水果掉落小游戏&#xff0c;掌握基本的动态交互逻辑和鸿蒙组件的使用&#xff0c;进一步了解事件处理与状态管理。 关键词 UI互动应用水果掉落状态管理动态交互游戏开发 一、功能说明 水果掉落小游戏包含以下交互功能&#xff1a; 随机生成水果&#…...

2.C语言基础:语句、表达式、注释与标准库简介

目录 1.语句2.表达式3.语句块4.空格5.注释6.printf()7.标准库 本篇原文为&#xff1a;C语言基础&#xff1a;语句、表达式、注释与标准库简介 更多C进阶、rust、python、逆向等等教程&#xff0c;可点击此链接查看&#xff1a;酷程网 1.语句 C 语言的代码由一行行语句&#…...

Python 基于 opencv 的人脸识别监控打卡系统(源码+部署)

1. 引言 今天&#xff0c;我们将基于 Python 的 OpenCV 库和 wxPython 框架&#xff0c;构建一个实用的 人脸识别考勤系统。这是一个适合大学生学习的实战项目&#xff0c;功能经过充分调试&#xff0c;确保运行稳定。该系统不仅能帮助你了解人脸识别技术的基本原理&#xff0…...

Maven的依赖管理

1. 依赖管理 依赖管理&#xff0c;可以将有关依赖项的所有信息放在共同的POM中&#xff0c;并对子POM中的工件进行更简单的引用。举个例子&#xff1a; 父POM <project>......<dependencyManagement><dependencies><dependency><groupId>gro…...

数据结构考前一天

线性表&#xff1a;矩阵&#xff0c;链表&#xff08;单链表必考&#xff09; 栈和队列&#xff1a;出入判断&#xff0c;括号匹配&#xff0c;中缀转后缀 字符串数组&#xff1a;模式匹配next&#xff0c;nextval数组&#xff0c;数组寻址&#xff0c;三角矩阵对应一维数组k…...

获取 Astro Bot AI 语音来增强您的游戏体验!

有很多用户尝试过Astro Bot&#xff0c;却被Astro Bot可爱的声音所吸引。您是否想知道如何使用 Astro Bot 语音来拨打恶作剧电话或用他的声音说话&#xff1f;如果您有&#xff0c;那么这篇文章适合您。我们将向您展示如何为 Astro Bot 提供逼真的 AI 声音并在在线对话中使用它…...

html5开发,js 在元素div id=img1的最前面插入一个图片

在 JavaScript 中&#xff0c;你可以使用 document.createElement 来创建一个新的图片元素&#xff0c;然后使用 document.getElementById 来获取目标 div 元素&#xff0c;并使用 appendChild 方法将新创建的图片元素插入到 div 的最前面。不过&#xff0c;appendChild 方法会…...

Elasticsearch Serverless中的数据流自动分片深度解析

Elasticsearch Serverless中的数据流自动分片深度解析 一、Elasticsearch Serverless概述 1. 什么是Elasticsearch Serverless Elasticsearch Serverless是一种云端全托管的Elasticsearch服务&#xff0c;它基于云原生Serverless技术架构&#xff0c;提供自动弹性和完全免运…...

2025考研江南大学复试科目控制综合(初试807自动控制原理)

​ 2025年全国硕士研究生招生考试江南大学考点 一年年的考研如期而至&#xff0c;我也变成了研二了&#xff0c;作为2次考研经历的学长&#xff0c;总是情不自禁地回想起自己的考研经历&#xff0c;我也会经常从那段经历中汲取力量。我能理解大多数考生考完后的的迷茫无助&…...