【QT Quick】页面布局:手动定位与坐标系转换
在这篇教程中,我们将详细介绍在 QT Quick 中如何手动定位元素以及坐标系转换的概念和应用。手动定位不仅仅是指定 x、y 坐标,更涉及坐标系的管理。我们会从最基本的手动定位开始,逐步扩展到更复杂的坐标系转换操作。
坐标系
- 默认坐标系:QT Quick 中的默认坐标系是相对于左上角的
(0, 0),x轴向右增长,y轴向下增长。 - Z 轴控制层级:除了
x和y轴,z轴用于控制元素的前后层级。层次控制可以通过元素的代码顺序,或者直接设定z属性来调整元素的显示层次。
基本手动定位
在这个部分,我们通过创建两个矩形来演示手动定位。我们将分别设置这两个矩形的位置,并通过 z 属性控制它们的层次关系。
import QtQuick 2.15
import QtQuick.Controls 2.15ApplicationWindow {visible: truewidth: 400height: 400title: "QT Quick 手动定位示例"Rectangle {id: rect1width: 200height: 200color: "blue"x: 50y: 50z: 1 // 确保这个矩形在另一个矩形上面}Rectangle {id: rect2width: 200height: 200color: "red"x: 100y: 100z: -1 // 放在底层}
}
rect1:蓝色矩形,位置为(50, 50),层次设置为z: 1,确保它显示在rect2之上。rect2:红色矩形,位置为(100, 100),层次设置为z: -1,确保它显示在rect1之下。
通过调整 z 值,可以控制它们的层次关系,即使它们的 x 和 y 坐标有重叠。
坐标系转换
在实际应用中,当你需要根据父子关系动态设置元素的位置时,通常会遇到不同坐标系的问题。QT Quick 提供了一些方法来处理这些坐标系的转换,包括 mapToItem() 和 mapFromItem() 函数。我们将演示如何将鼠标点击的位置转换到某个元素的局部坐标系中。
mapToItem()
- 功能:将当前元素的坐标转换为目标元素的坐标系中的坐标。
- 参数:
targetItem:要转换到的目标元素。x:要转换的x坐标。y:要转换的y坐标。
- 返回值:返回一个
Qt.point对象,包含转换后的x和y坐标。
Rectangle {id: rect1width: 300height: 300color: "blue"Rectangle {id: rect2width: 50height: 50color: "red"x: 0y: 0}MouseArea {anchors.fill: parentonClicked: {var globalPos = mapToItem(rect1, mouse.x, mouse.y);console.log("Mouse position in rect1:", globalPos.x, globalPos.y);}}
}
在这个示例中,mapToItem(rect1, mouse.x, mouse.y) 将鼠标点击位置转换为相对于 rect1 的坐标。
mapFromItem()
- 功能:将目标元素的坐标转换为当前元素的坐标系中的坐标。
- 参数:
sourceItem:要转换的源元素。x:要转换的x坐标。y:要转换的y坐标。
- 返回值:返回一个
Qt.point对象,包含转换后的x和y坐标。
Rectangle {id: rect1width: 300height: 300color: "blue"Rectangle {id: rect2width: 50height: 50color: "red"x: 0y: 0}MouseArea {anchors.fill: parentonClicked: {var posInRect1 = mapFromItem(rect1, mouse.x, mouse.y);console.log("Mouse position in rect1 relative to rect2:", rect2.mapFromItem(rect1, posInRect1.x, posInRect1.y));}}
}
在这个示例中,mapFromItem(rect1, mouse.x, mouse.y) 将鼠标点击位置转换为相对于 rect1 的坐标,然后使用 rect2.mapFromItem() 将该坐标转换为 rect2 的坐标系。
总结
本教程详细讲解了 QT Quick 中的手动定位技术,并通过具体的示例演示了如何使用 z 轴控制元素的层次关系,以及如何在不同的坐标系之间进行转换。这些技巧在实际开发中非常有用,特别是当你需要动态调整布局或响应用户输入时。
通过掌握手动定位和坐标系转换,你可以更灵活地布局 QT Quick 界面,创建复杂的 UI 动画和交互效果。
相关文章:
【QT Quick】页面布局:手动定位与坐标系转换
在这篇教程中,我们将详细介绍在 QT Quick 中如何手动定位元素以及坐标系转换的概念和应用。手动定位不仅仅是指定 x、y 坐标,更涉及坐标系的管理。我们会从最基本的手动定位开始,逐步扩展到更复杂的坐标系转换操作。 坐标系 默认坐标系&…...
uniapp自定义导航,全端兼容
我们在用uniapp 开发应用的时候,有的页面需要自定义导航, 1.如果普通的直接使用uni 扩展柜组件的 uni-nav-bar 也基本够用, 2.如果稍微带点自定义的这个值无法支持的,特别在小程序端,胶囊是会压住右边的按钮的 自定…...
[论文阅读] DVQA: Understanding Data Visualizations via Question Answering
原文链接:http://arxiv.org/abs/1801.08163 启发:没太读懂这篇论文,暂时能理解的就是本文提出了一个专门针对条形图问答的数据集DVQA以及一个端到端模型SANDY,模型有两个版本,Oracle和OCR。主要解决的问题是固定词表无…...
【PostgreSQL】实战篇——数据备份和恢复的最佳实践和工具
数据备份和恢复是确保数据安全性和可用性的关键环节。无论是由于硬件故障、软件错误、数据损坏还是人为错误,能够快速恢复数据都是保护业务连续性的重要措施。 PostgreSQL 提供了多种备份和恢复工具和方法,其中最常用的包括 pg_dump、pg_restore 和点时…...
代码随想录算法训练营第二十九天|93.复原IP地址 78.子集 90.子集II
93.复原IP地址 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。 有效的 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 . 分隔。 例如:"…...
【mysql】使用AbstractRoutingDataSource实现多数据源 与 获取mapper上注解
使用AbstractRoutingDataSource实现多数据源 与 获取mapper上注解 背景 随着业务发展速度越来越快,数据的增长也呈现倍数级别增长,数据库的压力,对于查询和写入等所有操作,都依赖于主库,其实有一些对于时效性要求不高…...
希沃冰点还原
要取消希沃冰点还原,可以按照以下步骤进行: 打开希沃冰点还原的应用或程序。 在应用或程序的界面上,寻找设置选项或菜单。 点击或选择设置选项或菜单,进入设置界面。 在设置界面上,查找“取消”或“停止”等相关选项…...
Hadoop服务端口号、Spark端口号、Hive端口号以及启动命令
文章目录 1. 服务端口号1.1 Hadoop相关的服务端口号1.2 Spark相关的服务端口号1.3 Hive的连接端口 2. 服务启动指令 1. 服务端口号 1.1 Hadoop相关的服务端口号 HDFS的web页面访问端口 9870HDFS 的程序访问端口 8020Yarn的访问端口 8088历史日志访问端口 19888 1.2 Spark相关…...
【C++】--类和对象(3)
🤑个人主页: 起名字真南 🤑个人专栏:【数据结构初阶】 【C语言】 【C】 目录 1 深入构造函数2 类型转换3 static成员4 友元函数5 内部类6 匿名对象 1 深入构造函数 之前我们实现构造函数的时候,初始化成员变量都是在函数体内赋值,…...
国外电商系统开发-运维系统文件上传-高级上传
如果您要上传文件到10台服务器中,有3台服务器的路径不是一样的,那么在这种情况下您就可以使用本功能,单独执行不一样的路径 点击【高级】上传...
【MongoDB】mongodb | 部署 | 常用命令
一、概述 基于mongodb的tcp连接无数据上报,服务器强踢监测。 物联网项目,tcp协议,基于4G卡,设备由于某些原因会断开重连,但是tcp没有断开,导致tcp持续累加,浪费资源。 建立机制: 当t…...
【Chrome浏览器插件--资源嗅探猫抓】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、资源嗅探插件---猫抓二、使用步骤总结 一、资源嗅探插件—猫抓 猫抓是一个浏览器插件,可以检测当前网页中的一些资源文件,可设置嗅探的…...
2.4Mybatis——缓存机制
2.4Mybatis——缓存机制 缓存配置一二级缓存一级缓存二级缓存 合集总览:Mybatis框架梳理 讲真,Mybatis缓存这块的记忆已经模糊了。刚好此时写测试用例出现一个BUG,就以这个问题作为切入点来梳理一下。 Testpublic void test(){Address ad…...
移动技术开发:文件的读取
1 实验名称 文件的读写 2 实验目的 掌握Android中读写文件的实现方法。 3 实验源代码 布局文件代码: <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android&quo…...
Linux 中的 Makefile 伪目标详解
在 Linux 环境中,Makefile 是构建项目的重要工具,它通过定义规则,指导 make 工具如何编译和链接程序。通常我们会在 Makefile 中定义目标(target),这些目标通常对应文件名。然而,有一种特殊类型…...
Java基础(中)
变量 成员变量与局部变量的区别 语法形式:从语法形式上看,成员变量是属于类的,而局部变量是在代码块或方法中定义的变量或是方法的参数;成员变量可以被 public,private,static 等修饰符所修饰,而局部变量不能被访问控…...
Leetcode热题100-200 岛屿数量
Leetcode热题100-200 岛屿数量 1. 题目描述2. 代码实现1. dfs算法2. bfs算法 1. 题目描述 200 岛屿数量 2. 代码实现 1. dfs算法 class Solution { public:int numIslands(vector<vector<char>>& grid) {int m grid.size(), n grid[0].size();int res 0…...
大数据新视界 --大数据大厂之 GraphQL 在大数据查询中的创新应用:优化数据获取效率
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...
swift使用代码结构解析
多模态模型的训练llamafactory也可以训练,但是总的来说,llamafactory对多模态模型的支持还是不太多,ms-swift支持的多模态模型更多,因此有时候去找框架是否够支持相应的模型时会有所困难,所以对这些框架的代码也要稍微…...
五、Python基础语法(程序的输入和输出)
一、输入 输入:输入就是获取键盘输入的数据,使用input()函数。代码会从上往下执行,当遇到input()函数,就会暂停执行,输入内容后,敲回车键,表示本次的输入结束。input函数得到的数据类型都是字符…...
动态扩散Transformer(DyDiT++)技术解析与优化
1. 动态扩散Transformer(DyDiT)技术解析在视觉生成领域,扩散模型(Diffusion Models)已成为当前最主流的生成技术之一。这类模型通过逐步去噪的过程,能够合成高质量的图像和视频内容。然而,随着模…...
RT-Thread裁剪实战:从98KB到28KB的嵌入式系统瘦身指南
1. 项目概述:为什么我们需要裁剪RT-Thread?如果你是一名嵌入式软件工程师,或者正在学习RT-Thread,那么“裁剪”这个词对你来说一定不陌生。RT-Thread作为一款优秀的国产开源实时操作系统,其标准版(或称完整…...
别再只盯着p值和FC了!用DisGeNET给你的Hub Gene打分,提升下游验证成功率
别再只盯着p值和FC了!用DisGeNET给你的Hub Gene打分,提升下游验证成功率 在基因功能研究的海洋中,Hub Gene如同灯塔般指引着研究方向。然而,许多研究者仍被困在传统筛选方法的局限中——过度依赖差异表达基因的p值和fold change阈…...
TikTok 短视频生成工具哪家好?TikTok 爆款视频复刻,有什么工具推荐
在 TikTok 流量竞争愈发激烈的 2026 年,想要快速起号、稳定爆单,离不开优质短视频量产和爆款视频复刻。不用从零原创创作,借助成熟 AI 工具复刻平台热门爆款,已经成为跨境卖家和内容创作者的主流玩法。 不少人都在纠结两大问题&a…...
别再手动搭后台了!用vue-admin-template + SpringBoot 30分钟搞定讲师管理模块
别再手动搭后台了!用vue-admin-template SpringBoot 30分钟搞定讲师管理模块 在快节奏的互联网开发中,后台管理系统的高效搭建一直是开发者面临的痛点。传统方式从零开始构建,不仅需要处理路由配置、权限管理、UI组件等基础架构,…...
Inkscape实战:用蒙版给你的Logo或文字快速添加酷炫的渐变效果
Inkscape蒙版进阶:打造专业级渐变Logo的5种创意技法 在矢量设计领域,一个普通的Logo与令人眼前一亮的作品之间,往往只差一层巧妙的渐变蒙版。作为开源矢量图形编辑器的标杆,Inkscape的蒙版功能远不止于基础遮罩——当它与渐变工具…...
技术博主都在悄悄用的Perplexity高级搜索语法,11个未公开符号组合全曝光
更多请点击: https://kaifayun.com 第一章:Perplexity高级搜索语法的底层逻辑与设计哲学 Perplexity 的高级搜索语法并非简单的关键词匹配扩展,而是基于语义意图建模与查询图谱重构的设计实践。其核心在于将用户自然语言查询实时编译为可执行…...
为OpenClaw配置Taotoken作为自定义模型供应商的详细指南
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为OpenClaw配置Taotoken作为自定义模型供应商的详细指南 OpenClaw是一个流行的开源Agent框架,它允许开发者灵活地配置和…...
避坑指南:Teamcenter 13四层架构安装中,Weblogic域创建与部署的那些“坑”
Teamcenter 13四层架构部署实战:Weblogic域创建与部署全流程避坑指南 在工业PLM领域,Teamcenter的四层架构部署一直是系统管理员的技术试金石。特别是Weblogic中间件层的配置,往往成为项目推进道路上的"拦路虎"。我曾参与过多个汽…...
IC设计五大典型Bug剖析:从CDC到软硬件协同的防御性设计
1. 项目概述:IC设计中的那些“老朋友”在芯片设计的江湖里混迹多年,我越来越觉得,我们这些IC工程师(ICer)的日常,与其说是在创造,不如说是在与各种层出不穷的“老朋友”——也就是bug——斗智斗…...
