PySide(PyQT),QGraphicsItem的pos()和scenePos()区别

news2025/3/12 6:04:53

        在QGraphicsItem中,pos()和scenePos()是两个重要的方法,用于描述图形项的位置,但它们的含义和用途有所不同。理解它们的区别对于正确操作和管理QGraphicsItem的位置至关重要。

1. pos()方法

        • 定义:pos()返回的是QGraphicsItem在其父项坐标系中的位置(以QPointF表示)。

        • 用途:当你需要操作图形项相对于其父项的位置时,使用pos()。

        • 场景:

        • 如果图形项没有父项(即它是场景的顶层项),pos()表示的是它在场景坐标系中的位置。

        • 如果图形项有父项,pos()表示的是它相对于父项的位置。


2. scenePos()方法

        • 定义:scenePos()返回的是QGraphicsItem在场景坐标系中的位置(以QPointF表示)。

        • 用途:当你需要获取图形项在场景中的绝对位置时,使用scenePos()。

        • 场景:

        • 无论图形项是否有父项,scenePos()总是返回它在场景中的全局位置。

        • 如果图形项有父项,scenePos()会自动将局部坐标转换为场景坐标。


3. 区别总结

 特性pos()scenePos()
坐标系父项坐标系(局部坐标)场景坐标系(全局坐标)
顶层项如果没有父项,pos() 和 scenePos() 的值相同总是返回场景中的绝对位置
有父项 返回相对于父项的位置返回场景中的绝对位置
用途操作局部位置获取全局位置

 
4. 示例代码

from PySide6.QtWidgets import QGraphicsRectItem, QGraphicsScene, QGraphicsView, QApplication
from PySide6.QtCore import QRectF, Qt


app = QApplication([])

scene = QGraphicsScene()
view = QGraphicsView(scene)

# 创建父项
parent_item = QGraphicsRectItem(50, 50, 200, 200)
parent_item.setBrush(Qt.GlobalColor.lightGray)
scene.addItem(parent_item)

# 创建子项
child_item = QGraphicsRectItem(80, 80, 100, 100)
child_item.setBrush(Qt.GlobalColor.blue)
child_item.setParentItem(parent_item) # 设置父项
child_item.setPos(100, 100) # 设置子项在父项中的位置

parent_item.setPos(100, 100) # 设置父项在场景中的的位置

# 打印位置信息
print(f"Child pos(): {child_item.pos()}") # 子项的局部位置(100,100)
print(f"Child scenePos(): {child_item.scenePos()}") # 子项的场景位置(200,200)

view.setScene(scene)
view.show()
app.exec()


5.实际应用场景

    • pos()的使用场景:

        • 当需要调整图形项相对于其父项的位置时。

        • 当需要在局部坐标系中进行操作(例如,子项相对于父项的布局)。

    • scenePos()的使用场景:

        • 当需要获取图形项在场景中的绝对位置时。

        • 当需要与其他图形项进行全局比较或交互时(例如,碰撞检测、鼠标事件处理)。

总结

        • pos()表示图形项在其父项坐标系中的位置。

        • scenePos()表示图形项在场景坐标系中的绝对位置。

        • 根据需求选择合适的坐标系和方法,可以更灵活地操作和管理图形项的位置。

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

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

相关文章

消防设施操作员考试备考:以技巧为翼,翱翔知识天空​

消防设施操作员考试的备考过程中,掌握实用技巧能让学习事半功倍。以下为您介绍一系列备考技巧,助您在知识的天空中自由翱翔。​ 记忆技巧:化繁为简​ 消防知识众多,记忆难度较大。可以采用多种记忆方法,如口诀记忆法…

物联网商业模式

物联网商业模式是一种战略规划,它融合了物联网技术来创造价值并获取收入。它与传统商业模式的不同之处在于,它利用互联设备来改善运营、提升客户体验以及优化服务项目。在当今由科技驱动的世界中,这种商业模式通过利用实时数据来提供创新服务…

【RabbitMQ】事务

事务的简单配置及使用 配置事务管理器声明队列生产者代码测试 RabbitMQ是基于AMQP协议实现的,该协议实现了事务机制,因此RabbitMQ也支持事务机制. SpringAMQP也提供了对事务相关的操作.RabbitMQ事务允许开发者确保消息的发送和接收是原子性的&#xff0c…

MVCC的理解(Multi-Version Concurrency Control,多版本并发控制)

1.事务特性(ACID) 原子性:事务要么全部成功,否则全部回滚 一致性:保证逻辑完整性(关联表删除) 隔离性:事务并发隔离(行锁,间隙锁) 持久性:已提交的事务永…

每日一题----------集合

数组: (1)长度开始必须指定,而且一但指定,不能修改。 (2)保存的必须为同一类型的元素。 (3)使用数组进行增加元素的代码--比较麻烦。 如果要添加数据则需要&#xff…

滑动窗⼝(同向双指针)---最⼤连续1的个数III

题目链接 给定一个二进制数组 nums 和一个整数 k,假设最多可以翻转 k 个 0 ,则返回执行操作后 数组中连续 1 的最大个数 。 示例 1: 输入:nums [1,1,1,0,0,0,1,1,1,1,0], K 2 输出:6 解释:[1,1,1,0,0,…

《几何原本》命题I.30

《几何原本》命题I.30 平行于同一直线的两条直线互相平行。 设 l 1 ∥ l 2 , l 1 ∥ l 3 l_1\parallel l_2,l_1\parallel l_3 l1​∥l2​,l1​∥l3​ 则 ∠ 1 ∠ 2 , ∠ 1 ∠ 3 \angle 1\angle 2,\angle 1\angle 3 ∠1∠2,∠1∠3 则 ∠ 2 ∠ 3 \angle 2\angle 3 ∠2∠3…

dify-SQL查询

第1节 DIFY 编排流程 1.1 步骤 1.开始:用户输入分析需求 2.LLM-SQL 专家:大模型根据用户输入需求生成 SQL 查询 3.SQL查询:执行查询并获取数据 4.结束:输出查询结果集 1.2 工作流 第2节 组件配置 2.1 开始 新建一个开始组件&am…

贪心算法精解:用C++征服最优解问题

贪心算法精解:用C征服最优解问题 一、贪心算法的本质:当下最优即全局最优 贪心算法如同下棋高手,每一步都选择当前最优的走法。它的核心思想是:通过局部最优选择的叠加,最终得到全局最优解。这种算法在时间复杂度上往…

一文了解汽车图像传感器

2024年底,安森美做了题为"How Automotive Image Sensors Transform the Future of Autonomous Driving"的演讲,这里结合其内容对自动驾驶图像传感器做一个介绍。 当前的自动驾驶感知技术主要有两大技术路线:一种是仅使用摄像头作为传感器进行信息采集的纯…

2025数据存储技术风向标:解析数据湖与数据仓库的实战效能差距

一、技术演进的十字路口 当前全球数据量正以每年65%的复合增长率激增,IDC预测到2027年企业将面临日均处理500TB数据的挑战。在这样的背景下,传统数据仓库与新兴数据湖的博弈进入白热化阶段。Gartner最新报告显示,采用混合架构的企业数据运营效…

ubuntu软件

视频软件,大部分的编码都能适应 sudo apt install vlc图片软件 sudo apt install gwenview截图软件 sudo apt install flameshot设置快捷键 flameshot flameshot gui -p /home/cyun/Pictures/flameshot也就是把它保存到一个自定义的路径 菜单更换 sudo apt r…

《面向对象程序设计-C++》实验一 熟悉Visual C++开发环境及上机过程

一、实验目的 了解和使用VC集成开发环境;熟悉VC环境的基本命令和功能键;熟悉常用的功能菜单命令;学习使用VC环境的帮助;学习完整的C程序开发过程;理解简单的C程序结构。 二、实验内容 使用Visual C 6.0集成环境来编…

Java的 JDBC 编程

1. Java的数据库编程:JDBC JDBC:Java 通过JDBC这样的技术来操作 MySQL MySQL 是一个基于 C/C 实现的数据库。 本身也提供了一系列的 API (Application Progromming Interface),让程序员调用,从而通过代码来…

开源!速度100Kb/s的有线和无线双模ESP32S3芯片的DAP-Link调试器

开源!速度100Kb/s的有线和无线双模ESP32S3芯片的DAP-Link调试器 目录 开源!速度100Kb/s的有线和无线双模ESP32S3芯片的DAP-Link调试器本项目未经授权,禁止商用!本项目未经授权,禁止商用!本项目未经授权&…

如何将ipynb文件转换为pdf文件

事情起因: 基本我所有的code以及代码注释,以及出图说明都统一放在jupyter notebook中, 代码注释,或者文档说明,实际上就是markdown所做的那一切,都是在markdown中写的; 代码的话,…

具备多种功能的PDF文件处理工具

软件介绍 在日常办公和学习场景中,PDF文件使用极为频繁,而一款功能强大的PDF编辑软件能大幅提升处理效率。 今天要介绍的Adobe Acrobat Pro DC 2024.005.20414,就具备像编辑Word文档一样便捷编辑PDF的能力。 PDF文档在学习和工作中广泛应用…

如何做好滚珠导轨的防尘工作?

滚珠导轨滑块在使用过程中,会吸附大量的灰尘和污垢,导致摩擦力增大,使用寿命缩短。那么,我们应该如何做好滚珠导轨的防尘工作呢? 1、使用防护罩:对于外露的滚珠导轨,可安装如螺旋弹簧钢带套管、…

nettrace rtt分析器

开源工具学习记录之流程梳理 近期对腾讯的的开源项目: nettrace(网络故障分析工具) ,进行源码学习。 开源仓库:Nettrace开源仓库 开源工具实现注释:nettrace学习记录 Nettrace学习记录之流程梳理Nettrace eBPF程序自动挂载方式探究 nettrace rtt分析器…