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

QGraphics View坐标系

QGraphics View绘图结构依赖三个类:QGraphicsScene,QGraphicsView,QGraphicsItem。

这三者的关系在前面已经介绍过:Graphics View 绘图架构-CSDN博客

这里介绍下这三者的坐标系,以及如何相互转换。


 

1. QGraphicsScene 坐标系

描述QGraphicsScene 使用的是场景坐标系,这是一个笛卡尔坐标系,其中 (0, 0) 通常是场景的左上角。

用途: 用于确定图形项在场景中的位置。

范围: 场景坐标系可以非常大,支持大量的图形项。

2. QGraphicsView 坐标系

描述QGraphicsView 使用的是视图坐标系,这也是一个笛卡尔坐标系,其中 (0, 0) 通常是视图的左上角。

用途: 用于确定用户在视图中的操作位置,如鼠标点击、拖动等。

范围: 视图坐标系通常与视图的大小一致,但可以通过缩放和平移操作改变。

3. QGraphicsItem 坐标系

描述QGraphicsItem 使用的是本地坐标系,其中 (0, 0) 通常是图形项的局部原点。这个原点的具体位置取决于图形项的类型和构造方式。以下是一些常见图形项的默认原点位置:

  • QGraphicsRectItem(0, 0, 100, 100); // 创建的矩形,其左上角在 (0, 0),右下角在 (100, 100)。
  • QGraphicsEllipseItem(0, 0, 100, 100); // 创建的椭圆,其左上角在 (0, 0),右下角在 (100, 100)。
  • QGraphicsPolygonItem;  // (0, 0) 是多边形的第一个顶点。
  • QGraphicsPathItem;  // (0, 0) 是路径的起始点。
  • 自定义QGraphicsItem,对于自定义的 QGraphicsItem,(0, 0) 的位置完全由你在重写的 boundingRect 和 paint 方法中定义。

用途: 用于确定图形项内部的细节,如子项的位置、形状等。

范围: 本地坐标系通常与图形项的大小一致,但可以有更复杂的变换(如旋转、缩放)。

4. 三者坐标之间的相互转换

鼠标事件的传递方向是:视图view -> 场景scene -> 图元item。详情可参考之前的博文 Graphics View 绘图架构-CSDN博客

所以这里将关注的转换路径:视图view坐标 -> 场景scene坐标 -> 图元item坐标

这些坐标的变换都是通过两端对象的方法控制,要么是view对象,要么是item对象。

4.1 视图坐标和场景坐标

通过view控制

(1)视图坐标 -> 场景坐标系: QPointF scenePos = view->mapToScene(viewPos);wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

(2)场景坐标 -> 视图坐标系: QPoint viewPos = view->mapFromScene(scenePos);

4.2 场景坐标系和图形项坐标

通过item控制

(1)场景坐标 -> 图形项的本地坐标系:QPointF itemPos = item->mapFromScene(scenePos);

(2)图形项的本地坐标 -> 场景坐标系: QPointF scenePos = item->mapToScene(itemPos); 

4.3 视图坐标和图形项坐标

中间都要经过场景坐标。

(1)视图坐标 -> 图形项的本地坐标系:

QPointF scenePos = view->mapToScene(viewPos);
QPointF itemPos = item->mapFromScene(scenePos);

(2)图形项的本地坐标 -> 视图坐标系

QPointF scenePos = item->mapToScene(itemPos);
QPoint viewPos = view->mapFromScene(scenePos);

相关文章:

QGraphics View坐标系

QGraphics View绘图结构依赖三个类:QGraphicsScene,QGraphicsView,QGraphicsItem。 这三者的关系在前面已经介绍过:Graphics View 绘图架构-CSDN博客 这里介绍下这三者的坐标系,以及如何相互转换。 1. QGraphicsScen…...

繁星之下--

在一个宁静的小镇上,年轻的画家阿宁用她的画笔捕捉着四季的变换。这个小镇四季分明,春天的嫩芽、夏天的繁花、秋天的金黄和冬天的白雪,仿佛每一个季节都在向她诉说着自己的故事。阿宁常常在思考,如何将这些美丽的瞬间转化为永恒的…...

Transformer+KAN系列时间序列预测代码

前段时间,来自 MIT 等机构的研究者提出了一种非常有潜力的替代方法 ——KAN。该方法在准确性和可解释性方面表现优于 MLP。而且,它能以非常少的参数量胜过以更大参数量运行的 MLP。 KAN的发布,引起了AI社区大量的关注与讨论,同时…...

vue项目安装组件失败解决方法

1.vue项目 npm install 失败 删除node_modules文件夹、package-lock.json 关掉安装对话框 重新打开对话框 npm install...

C++ [项目] 躺平发育

一、基本介绍 支持Dev-C5.11版本(务必调为英文输入法),基本操作看游戏里的介绍,怎么做的……懒得说,能看懂就看注释,没有的自己猜,如果你很固执……私我吧 二、代码部分 #include<bits/stdc.h> #include<windows.h> #include<unistd.h> using namespace st…...

[产品管理-55]:产品设计不仅仅完成功能,即可用性设计,还需要完成可生产性、可装配性、可维护性、可回收性、可服务性设计

目录 可用性设计&#xff1a; 可生产性设计&#xff1a; 可装配性设计&#xff1a; 可维护性设计&#xff1a; 可回收性设计&#xff1a; 可服务性设计&#xff1a; 产品设计是一个综合性的过程&#xff0c;它不仅仅局限于完成产品的基本功能&#xff0c;即可用性设计&am…...

Mount Image Pro,在取证安全的环境中挂载和访问镜像文件内容

天津鸿萌科贸发展有限公司从事数据安全服务二十余年&#xff0c;致力于为各领域客户提供专业的数据恢复、数据备份解决方案与服务&#xff0c;并针对企业面临的数据安全风险&#xff0c;提供专业的相关数据安全培训。 天津鸿萌科贸发展有限公司是 GetData 公司数据恢复与取证工…...

玩转Docker | Docker基础入门与常用命令指南

玩转Docker | Docker基础入门与常用命令指南 引言基本概念help帮助信息常用命令管理镜像运行容器构建镜像其他Docker命令整理结语引言 Docker 是一种开源的应用容器引擎,它允许开发者将应用程序及其依赖打包进一个可移植的容器中,然后发布到任何流行的 Linux 机器上。这大大简…...

【MySQL】MySQL安装以及各种报错处理

前言&#xff1a; 本节内容讲述在Ubuntu环境下怎么进行MySQL的安装。 以及一些安装过程中遇到的报错如何处理的问题。 ps:注意&#xff0c; 本篇文章不是图形化界面的MySQL安装教程哦。想要安装图形化界面的MySQL的友友们可以另寻资源了。 目录 更新软件包列表 安装M…...

【传知代码】图像处理解决种子计数方法

文章目录 一、背景及意义介绍研究背景农业考种需求传统计数方法的局限性人工计数仪器设备计数 研究意义提高育种效率提高计数准确性广泛的适用性数据存档与分析便利 二、概述三、材料与数据准备以及方法介绍整体流程图像采集图像预处理形态学操作腐蚀运算开运算 图像二值化种子…...

WPF 特性------Binding

工业控制中&#xff0c;经常会需要把一个bool 型输入信号的状态显示在面板上&#xff0c;使用wpf 绑定的办法&#xff0c;可简洁实现&#xff1a; 实现步骤&#xff1a; 1&#xff0c;定义类&#xff1a; using System; using System.Collections.Generic; using System.Com…...

深入解析 FastAPI 查询参数:配置、类型转换与灵活组合

深入解析 FastAPI 查询参数&#xff1a;配置、类型转换与灵活组合 本文全面解析了 FastAPI 查询参数的使用方法&#xff0c;包括配置默认值、设为可选或必选参数、类型转换以及组合使用等实用技巧。通过查询参数&#xff0c;开发者可以在路径操作函数中接收动态输入&#xff0…...

大学城水电管理系统开发:Spring Boot指南

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…...

Lua 从基础入门到精通(非常详细)

目录 什么是 Lua&#xff1f; Lua 环境安装 Lua基本语法 注释 数据类型 nil&#xff08;空&#xff09; Boolean number&#xff08;数字&#xff09; string&#xff08;字符串&#xff09; function&#xff08;函数&#xff09; userdata thread table&#xff…...

[MySQL#11] 索引底层(2) | B+树 | 索引的CURD | 全文索引

目录 1.B树的特点 索引结构 复盘 其他数据结构的对比 B树与B树总结 聚簇索引与非聚簇索引 辅助索引 2. 索引操作 主键索引 1. 创建主键索引 第一种方式 第二种方式 第三种方式 2. 查询索引 第一种方法 第二种方法 第三种方法 3. 删除索引 删除主键索引 删除…...

一个指针可以被声明为 `volatile`

一个指针可以被声明为 volatile。当指针被声明为 volatile 时&#xff0c;指针本身的地址值可能会在程序之外的控制下发生变化&#xff0c;这意味着编译器在使用该指针时必须每次都重新从内存中读取它的地址&#xff0c;而不能假设指针的地址保持不变。 为什么指针可以是 vola…...

[0260].第25节:锁的不同角度分类

MySQL学习大纲 我的数据库学习大纲 从不同维度对锁的分类&#xff1a; 1.对数据操作的类型划分:读锁和写锁 1.1.读锁 与 写锁概述&#xff1a; 1.对于数据库中并发事务的读-读情况并不会引起什么问题。对于写-写、读-写或写-读这些情况可能会引起一些问题&#xff0c;需要使用…...

android数组控件Textview

说明&#xff1a;android循环控件&#xff0c;注册和显示内容 效果图&#xff1a; step1: E:\projectgood\resget\demozz\IosDialogDemo-main\app\src\main\java\com\example\iosdialogdemo\TimerActivity.java package com.example.iosdialogdemo;import android.os.Bundl…...

openpnp - 手工修改配置文件(元件高度,size,吸嘴)

文章目录 openpnp - 手工修改配置文件(元件高度,size,吸嘴)概述笔记parts.xmlpackages.xml 手工将已经存在的NT1,NT2拷贝出来改名备注END openpnp - 手工修改配置文件(元件高度,size,吸嘴) 概述 载入新板子贴片准备时&#xff0c;除了引入Named CSV文件&#xff0c;还要在ope…...

Java 集合一口气讲完!(中)d=====( ̄▽ ̄*)b

Java 队列 Java集合教程 - Java队列 队列是只能在其上执行操作的对象的集合两端的队列。 队列有两个末端&#xff0c;称为头和尾。 在简单队列中&#xff0c;对象被添加到尾部并从头部删除并首先删除首先添加的对象。 Java Collections Framework支持以下类型的队列。 简单…...

langchain4j笔记-09

RAG 1. easy rag Test void test03() {// 1. 创建模型// 2. 加载文档List<Document> documents ClassPathDocumentLoader.loadDocuments("excel");//List<Document> documents FileSystemDocumentLoader.loadDocuments("/home/langchain4j/docum…...

FPGA+DDR3+千兆以太网:构建实时高清图像传输与显示系统(附源码)

1. 实时高清图像传输系统的核心价值 想象一下这样的场景&#xff1a;医疗内窥镜手术中&#xff0c;医生需要实时查看1080p高清影像&#xff1b;工业检测线上&#xff0c;高速摄像头每秒产生数百帧4K画面&#xff1b;无人机航拍时&#xff0c;需要将拍摄的高清视频实时回传到地面…...

别再只会点Run了!深度解读Calibre DRC/LVS/PEX那些容易被忽略的配置项

别再只会点Run了&#xff01;深度解读Calibre DRC/LVS/PEX那些容易被忽略的配置项 在芯片设计验证领域&#xff0c;Calibre工具链早已成为行业标准&#xff0c;但许多工程师对其功能的理解仍停留在"Run DRC/LVS/PEX"的基础操作层面。当面对复杂设计时&#xff0c;这种…...

2026山东大学软件学院项目实训(六)

一、基本信息组号&#xff1a;69组员&#xff1a;李重昊负责模块&#xff1a;AI 工作流 —— 图片收集节点二、任务概述在 LangGraph4j 工作流中完成图片收集节点开发&#xff0c;根据用户自然语言需求自动规划并收集网站所需图片&#xff0c;为后续提示词增强与代码生成提供素…...

Linux驱动开发实战:手把手教你为GT1151触摸屏编写I2C+Input+中断驱动(基于F1C200S)

Linux驱动开发实战&#xff1a;GT1151触摸屏I2CInput中断驱动全解析 1. 嵌入式Linux驱动开发概述 在嵌入式系统开发中&#xff0c;触摸屏作为人机交互的核心组件&#xff0c;其驱动开发一直是工程师必须掌握的技能。GT1151作为一款广泛应用于嵌入式设备的电容式触摸屏控制器&am…...

数学科研效率提升300%,NotebookLM辅助建模全流程解析,含独家提示词矩阵与误差校验协议

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM数学研究辅助的范式革命 传统数学研究长期依赖纸笔推演、孤立文献查阅与手工公式验证&#xff0c;而NotebookLM通过其独特的“语义锚点双文档协同推理”机制&#xff0c;重构了从问题建模到定…...

【DeepSeek本地部署终极指南】:20年AI架构师亲授,从零到生产级部署的7大避坑步骤

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;DeepSeek本地部署完整指南 DeepSeek系列大模型&#xff08;如DeepSeek-V2、DeepSeek-Coder&#xff09;已开源权重&#xff0c;支持在消费级GPU或本地服务器上高效部署。本指南聚焦零基础用户&#xff0c;提供…...

AI智能体技能开发实战:从awesome-agent-skills到高效智能体构建

1. 项目概述&#xff1a;从技能清单到智能体构建的实战指南最近在折腾AI智能体&#xff08;Agent&#xff09;开发的朋友&#xff0c;估计都绕不开一个名字&#xff1a;awesome-agent-skills。这个由VoltAgent维护的开源项目&#xff0c;乍一看就是个GitHub上常见的“Awesome”…...

Dify工作流终极指南:50+模板一键导入,零基础也能快速上手AI自动化

Dify工作流终极指南&#xff1a;50模板一键导入&#xff0c;零基础也能快速上手AI自动化 【免费下载链接】Awesome-Dify-Workflow 分享一些好用的 Dify DSL 工作流程&#xff0c;自用、学习两相宜。 Sharing some Dify workflows. 项目地址: https://gitcode.com/GitHub_Tren…...

基于LLM的代码仓库智能分析:RepoMap-AI实现架构可视化与认知图谱

1. 项目概述&#xff1a;当AI成为你的代码库“活地图”最近在折腾一个老旧的Java项目&#xff0c;里面模块套模块&#xff0c;依赖关系复杂得像一团乱麻。想找个特定的工具类&#xff0c;得在十几个包里翻来覆去地搜&#xff1b;想理清某个核心服务的调用链路&#xff0c;光靠I…...