当前位置: 首页 > 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支持以下类型的队列。 简单…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...