当前位置: 首页 > 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…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...