当前位置: 首页 > news >正文

qt QGraphicsScene场景坐标和场景内GraphicsItem局部坐标的相互转换

为了更清晰地解释场景坐标与局部坐标之间的转换过程,我们可以通过一个简单的实例来演示如何赋值场景坐标,并将其转换为图形项的局部坐标。

实例步骤

假设我们有一个场景 QGraphicsScene 和一个矩形图形项 QGraphicsRectItem,矩形的大小为 100x100,位置在场景中的 (200, 200) 点。我们想将场景坐标 (250, 250) 转换为这个矩形图形项的局部坐标,此局部坐标再转回场景坐标。

#include <QApplication>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsRectItem>
#include <QPointF>
#include <QDebug>int main(int argc, char* argv[])
{QApplication a(argc, argv);// 创建场景QGraphicsScene scene;// 创建一个矩形图形项,并设置其位置QGraphicsRectItem* rectItem = new QGraphicsRectItem(0, 0, 100, 100); // 矩形大小 100x100,左上角坐标 (0, 0)rectItem->setPos(200, 200); // 将矩形的位置设为场景中的 (200, 200)scene.addItem(rectItem);    // 将矩形添加到场景中// 创建视图并展示场景QGraphicsView view(&scene);view.show();// 定义一个场景坐标 (250, 250)QPointF scenePoint(250, 250);// 场景坐标 -> 矩形图形项的局部坐标QPointF localPoint = rectItem->mapFromScene(scenePoint);// 矩形图形项的局部坐标 -> 场景坐标QPointF newScenePoint = rectItem->mapToScene(localPoint);// 输出转换后的局部坐标qDebug() << "Scene Point:" << scenePoint;       // 输出: (250, 250)qDebug() << "Local Point in RectItem:" << localPoint; // 输出: (50, 50)qDebug() << "New scene point in scene:" << newScenePoint; // 输出: (250, 250)return a.exec();
}

补充

QPointF local_pt = mapFromParent(pt); 此方法可以从父项的坐标系转换到当前图形项(GraphicsRectItem)的本地坐标系中。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 2024.9 学习笔记
  • axure判断
  • 3分钟带你快速了解 Java 接口
  • 模板:软件验收文档
  • 【STM32系统】基于STM32设计的智能垃圾桶(语音、颜色识别、称重、光强、烟雾、人体识别、步进电机、水泵)——文末资料下载
  • 157-安全开发-Python 自动化挖掘项目SRC 目标FOFA 资产Web 爬虫解析库
  • oracle 条件取反
  • discuz论坛3.4 截图粘贴图片发帖后显示不正常问题
  • Qt_控件的QWidget属性介绍
  • C/C++调试工具GDB简单介绍
  • 蓝桥杯真题——数星星
  • gitlab无法push(pre-receive hook declined)
  • vue3 响应式 API:readonly() 与 shallowReadonly()
  • MMdetection改进的目标检测算法
  • Mysql基础练习题 1407.排名靠前的旅行者(力扣)
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 03Go 类型总结
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • docker python 配置
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • MySQL的数据类型
  • MySQL用户中的%到底包不包括localhost?
  • Python_网络编程
  • vue--为什么data属性必须是一个函数
  • 工作手记之html2canvas使用概述
  • 规范化安全开发 KOA 手脚架
  • 京东美团研发面经
  • 学习使用ExpressJS 4.0中的新Router
  • 用jquery写贪吃蛇
  • 阿里云重庆大学大数据训练营落地分享
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • $(function(){})与(function($){....})(jQuery)的区别
  • (第27天)Oracle 数据泵转换分区表
  • (独孤九剑)--文件系统
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)平衡树
  • (状压dp)uva 10817 Headmaster's Headache
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .gitignore文件—git忽略文件
  • .NET Core 版本不支持的问题
  • .NET 反射的使用
  • .net 后台导出excel ,word
  • .Net 垃圾回收机制原理(二)
  • .NET 使用配置文件
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • .NET正则基础之——正则委托
  • .NET中分布式服务