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

        在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, Qtapp = 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.rhkb.cn/news/31954.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 进程控制:创建、终止、等待与程序替换全解析

亲爱的读者朋友们😃,此文开启知识盛宴与思想碰撞🎉。 快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。 目录 1.进程创建 1-1 fork函数初识​ 1-2 fork函数返回值​ 1-3…

GStreamer —— 2.18、Windows下Qt加载GStreamer库后运行 - “播放教程 6:音频可视化“(附:完整源码)

运行效果 介绍 GStreamer 带有一组将音频转换为视频的元素。他们 可用于科学可视化或为您的音乐增添趣味 player 的本教程展示了: • 如何启用音频可视化 • 如何选择可视化元素 启用音频可视化实际上非常简单。设置相应的标志,当纯音频流为 found&#…

Excel多级联动下拉菜单设置

1.问题描述 现有数据表如下图所示: 该表中包括省、市、县三级目录。 现要将其整理成数据表模板,如下图所示: 要求制作成下拉菜单的形式,且每一级目录的下拉菜单列表要根据上一级目录的内容来确定。 如上图所示,只有…

Web基础:HTML快速入门

HTML基础语法 HTML(超文本标记语言) 是用于创建网页内容的 标记语言,通过定义页面的 结构和内容 来告诉浏览器如何呈现网页。 超文本(Hypertext) 是一种通过 链接(Hyperlinks) 将不同文本、图像…

VSTO(C#)Excel开发2:Excel对象模型和基本操作

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…

PostgreSQL学习笔记:PostgreSQL vs MySQL

PostgreSQL 和 MySQL 都是广泛使用的关系型数据库管理系统,它们有以下一些对比: 一、功能特性 1. 数据类型支持 PostgreSQL:支持丰富的数据类型,包括数组、JSON、JSONB、范围类型、几何类型等。对于复杂数据结构的存储和处理非…

Matlab:矩阵运算篇——矩阵

目录 1.定义 实例——创建矩阵 实例——创建复数矩阵 2.矩阵的生成 实例——M文件矩阵 2.利用文本创建 实例——创建生活用品矩阵 3.创建特殊矩阵 实例——生成特殊矩阵 4.矩阵元素的运算 1.矩阵元素的修改 实例——新矩阵的生成 2.矩阵的变维 实例——矩阵维度修…

从0到1入门Docker

一、快速入门 Docker run命令中的常见参数 -d:让容器后台运行--name:给容器命名(唯一)-e:环境变量-p:宿主机端口映射到容器内端口镜像名称结构:Repository :TAG(镜像名&…

Python的浮点数

在 Python 中,有四种内置数值类型,分别是整型整数类型(int)、布尔类型(bool)、浮点数类型(float)和复数类型(complex)。浮点数默认是双精度类型,占…

从零开始 | C语言基础刷题DAY1

❤个人主页:折枝寄北的博客 DAY1[2025.3.11] 1. 求两个数的较大值2.从键盘输入的两个数的大小关系3.一个整数的奇偶性,请判断4. 考试分数是否通过5.考试成绩是否完美,请判断 1. 求两个数的较大值 题目: 写一个函数求两个整数的较…

[pytest] 配置

这里写目录标题 PytestInitRun3. 根据命令行选项将不同的值传递给测试函数 Report1. 向测试报告标题添加信息2. 分析测试持续时间 pytest --durations33. 增量测试 - 测试步骤--junitxml{report}.xml1. testsuite1.1 在测试套件级别添加属性节点 record_testsuite_property 2. …

物联网商业模式

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

springboot432-基于SpringBoot的酒店管理系统(源码+数据库+纯前后端分离+部署讲解等)

💕💕作者: 爱笑学姐 💕💕个人简介:十年Java,Python美女程序员一枚,精通计算机专业前后端各类框架。 💕💕各类成品Java毕设 。javaweb,ssm&#xf…

Manus AI:开启Agent元年的ChatGPT时刻(附赠资料)

1. Manus AI:全球首个通用Agent Manus AI 是全球首个通用人工智能代理,连接思想与行动,不仅思考,还能交付成果。Manus 擅长处理工作和生活中的各种任务,帮助用户完成一切。其核心理念是“less structure, more intell…

vscode接入DeepSeek 免费送2000 万 Tokens 解决DeepSeek无法充值问题

1. 在vscode中安装插件 Cline 2.打开硅基流动官网 3. 注册并登陆,邀请码 WpcqcXMs 4.登录后新建秘钥 5. 在vscode中配置cline (1) API Provider 选择 OpenAI Compatible ; (2) Base URL设置为 https://api.siliconflow.cn](https://api.siliconfl…

从零使用docker并安装部署mysql8.3.0容器

在开始使用docker到完成mysql的安装部署,中间有很多的坑等着 安装docker并配置 sudo yum install docker-ce 启动docker并设置开机启动项 sudo systemctl start docker sudo systemctl enable docker查看docker是否启动 sudo systemctl status docker 或者直接…

golang 静态库 Undefined symbol: __mingw_vfprintf

正常用golang编译一个静态库给 其他语言 调用,编译时报错 Error: Undefined symbol: __mingw_vfprintf 很是奇怪,之前用用golang写静态库成功过,编译也没问题,结果却是截然不同。 试了很多次,发现唯一的差别就是在 …

如何下载一些网上只提供了预览的pdf

有些网站上提供了pdf的预览,但是不提供下载入口 这时候用浏览器调出开发人员工具(F12),找Fetch/XHR这个选项,里看启动器中有pdf的那个文件,点选 它。 然后就能找到它的网址了,直接把这个网址选中&#xff…

力扣-数组-34 在排序数组中查找元素的第一个和最后一个位置

思路和时间复杂度 思路&#xff1a;先找到中间数&#xff0c;如果没找到就返回{-1&#xff0c;-1}&#xff0c;如果找到了就以当前节点为中点&#xff0c;向两边扩时间复杂度&#xff1a; 代码 class Solution { public:vector<int> searchRange(vector<int…

一二三应用开发平台——能力扩展:多数据源支持

背景 随着项目规模的扩大&#xff0c;单一数据源已无法满足复杂业务需求&#xff0c;多数据源应运而生。 技术选型 MyBatis-Plus 的官网提供了两种多数据源扩展插件&#xff1a;开源生态的 <font style"color:rgb(53, 56, 65);">dynamic-datasource</fon…