【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函数得到的数据类型都是字符…...
Java 零基础全套视频教程,String StringBuffer StringBuilder 类,笔记142-146
Java 零基础全套视频教程,String StringBuffer StringBuilder 类,笔记142-146 一、参考资料 【尚硅谷Java零基础全套视频教程(宋红康主讲,java入门自学必备)】 https://www.bilibili.com/video/BV1PY411e7J6/?p142&share_sourcecopy_web…...
Flutter文件操作实战:File_selector跨平台文件处理从入门到精通
1. 为什么Flutter开发者都需要掌握File_selector? 在移动应用和桌面应用开发中,文件操作就像我们日常生活中的"文件柜"——你需要存放、查找、整理各种文档。而Flutter作为跨平台框架,最大的挑战就是如何在不同操作系统上实现统一的…...
突破限制:NCM音乐格式转换与跨平台播放完全指南
突破限制:NCM音乐格式转换与跨平台播放完全指南 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 音乐文件解密是许多音乐爱好者面临的实际需求,尤其是当你希望在不同设备上自由播放从网易云音乐下载的NCM格式文…...
快速上手语音情感分析:Emotion2Vec+系统参数配置与结果解读
快速上手语音情感分析:Emotion2Vec系统参数配置与结果解读 1. 系统概述与核心价值 Emotion2Vec Large语音情感识别系统是一款基于深度学习的语音分析工具,能够自动识别语音中蕴含的情感状态。该系统由科哥团队基于阿里达摩院ModelScope平台的原始模型进…...
从预测到归因:手把手教你用因果森林(grf)做特征重要性分析与亚组发现
从预测到归因:手把手教你用因果森林(grf)做特征重要性分析与亚组发现 在金融风控、个性化营销和医疗疗效评估等领域,我们常常面临一个关键问题:干预措施的效果是否存在显著差异?传统分析方法如A/B测试能告诉…...
Python内存管理策略对比评测报告(2024权威版):仅1种策略通过了金融级SLA压力测试,其余4种已淘汰
第一章:Python智能体内存管理策略对比评测报告(2024权威版)概述Python智能体(如基于LLM的Agent框架、自主任务调度器、多步推理引擎)在运行过程中面临高频对象创建、长生命周期缓存、跨线程引用共享等复杂内存场景。传…...
手把手教你学<基于 Linux 的 NPU 协处理器固件开发>专栏第1章 入门:
1.2 典型 AI 芯片架构:主核 Linux + NPU 协处理器 在上一节我们明确了NPU是依附于Linux主核的专用AI协处理器,属于主从配合的工作模式,这一节我们就深入拆解端侧AI芯片最主流的“Linux主核+NPU协处理器”异构架构。结合大家日常接触的代码仓库管理、编译脚本执行、固件烧录…...
OpenClaw人人养虾:配置Anthropic (Claude)
Anthropic 是 Claude 系列模型的开发者。Claude 以出色的指令遵循能力、深度推理和长文本处理著称。OpenClaw 支持通过 API Key 或 Claude Code CLI OAuth 接入。 认证方式 方式一:API Key(推荐) 前往 Anthropic Console 创建 API Key在 O…...
C-index避坑指南:生存分析中90%人会犯的5个评估错误
C-index避坑指南:生存分析中90%人会犯的5个评估错误 在临床研究和生物统计领域,C-index(Harrells concordance index)作为评估生存分析模型预测性能的核心指标,其正确计算与解读直接影响研究结论的可靠性。然而&#x…...
高并发分布式存储系统的设计与实践
高并发分布式存储系统的设计与实践 背景 最近团队需要设计一个支持高并发写入的分布式存储系统,用于处理每天数万亿条数据的写入和查询需求。作为一个在分布式存储领域深耕多年的技术人,我决定分享一下高并发分布式存储系统的设计思路和实践经验。 核心挑…...
