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);
(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]:产品设计不仅仅完成功能,即可用性设计,还需要完成可生产性、可装配性、可维护性、可回收性、可服务性设计
目录 可用性设计: 可生产性设计: 可装配性设计: 可维护性设计: 可回收性设计: 可服务性设计: 产品设计是一个综合性的过程,它不仅仅局限于完成产品的基本功能,即可用性设计&am…...
Mount Image Pro,在取证安全的环境中挂载和访问镜像文件内容
天津鸿萌科贸发展有限公司从事数据安全服务二十余年,致力于为各领域客户提供专业的数据恢复、数据备份解决方案与服务,并针对企业面临的数据安全风险,提供专业的相关数据安全培训。 天津鸿萌科贸发展有限公司是 GetData 公司数据恢复与取证工…...
玩转Docker | Docker基础入门与常用命令指南
玩转Docker | Docker基础入门与常用命令指南 引言基本概念help帮助信息常用命令管理镜像运行容器构建镜像其他Docker命令整理结语引言 Docker 是一种开源的应用容器引擎,它允许开发者将应用程序及其依赖打包进一个可移植的容器中,然后发布到任何流行的 Linux 机器上。这大大简…...
【MySQL】MySQL安装以及各种报错处理
前言: 本节内容讲述在Ubuntu环境下怎么进行MySQL的安装。 以及一些安装过程中遇到的报错如何处理的问题。 ps:注意, 本篇文章不是图形化界面的MySQL安装教程哦。想要安装图形化界面的MySQL的友友们可以另寻资源了。 目录 更新软件包列表 安装M…...
【传知代码】图像处理解决种子计数方法
文章目录 一、背景及意义介绍研究背景农业考种需求传统计数方法的局限性人工计数仪器设备计数 研究意义提高育种效率提高计数准确性广泛的适用性数据存档与分析便利 二、概述三、材料与数据准备以及方法介绍整体流程图像采集图像预处理形态学操作腐蚀运算开运算 图像二值化种子…...
WPF 特性------Binding
工业控制中,经常会需要把一个bool 型输入信号的状态显示在面板上,使用wpf 绑定的办法,可简洁实现: 实现步骤: 1,定义类: using System; using System.Collections.Generic; using System.Com…...
深入解析 FastAPI 查询参数:配置、类型转换与灵活组合
深入解析 FastAPI 查询参数:配置、类型转换与灵活组合 本文全面解析了 FastAPI 查询参数的使用方法,包括配置默认值、设为可选或必选参数、类型转换以及组合使用等实用技巧。通过查询参数,开发者可以在路径操作函数中接收动态输入࿰…...
大学城水电管理系统开发:Spring Boot指南
2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…...
Lua 从基础入门到精通(非常详细)
目录 什么是 Lua? Lua 环境安装 Lua基本语法 注释 数据类型 nil(空) Boolean number(数字) string(字符串) function(函数) userdata thread tableÿ…...
[MySQL#11] 索引底层(2) | B+树 | 索引的CURD | 全文索引
目录 1.B树的特点 索引结构 复盘 其他数据结构的对比 B树与B树总结 聚簇索引与非聚簇索引 辅助索引 2. 索引操作 主键索引 1. 创建主键索引 第一种方式 第二种方式 第三种方式 2. 查询索引 第一种方法 第二种方法 第三种方法 3. 删除索引 删除主键索引 删除…...
一个指针可以被声明为 `volatile`
一个指针可以被声明为 volatile。当指针被声明为 volatile 时,指针本身的地址值可能会在程序之外的控制下发生变化,这意味着编译器在使用该指针时必须每次都重新从内存中读取它的地址,而不能假设指针的地址保持不变。 为什么指针可以是 vola…...
[0260].第25节:锁的不同角度分类
MySQL学习大纲 我的数据库学习大纲 从不同维度对锁的分类: 1.对数据操作的类型划分:读锁和写锁 1.1.读锁 与 写锁概述: 1.对于数据库中并发事务的读-读情况并不会引起什么问题。对于写-写、读-写或写-读这些情况可能会引起一些问题,需要使用…...
android数组控件Textview
说明:android循环控件,注册和显示内容 效果图: 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,吸嘴) 概述 载入新板子贴片准备时,除了引入Named CSV文件,还要在ope…...
Java 集合一口气讲完!(中)d=====( ̄▽ ̄*)b
Java 队列 Java集合教程 - Java队列 队列是只能在其上执行操作的对象的集合两端的队列。 队列有两个末端,称为头和尾。 在简单队列中,对象被添加到尾部并从头部删除并首先删除首先添加的对象。 Java Collections Framework支持以下类型的队列。 简单…...
SRS (Simple Realtime Server) 实战:从SFU到大规模互动直播架构
1. SRS与SFU:互动直播的基石架构 第一次接触SRS时,我被它简洁的配置方式惊艳到了。这个看似轻量级的服务器,竟然能支撑起我们平台日均百万级的直播流量。作为选择性转发单元(SFU),SRS的核心价值在于它解决了…...
终极Python自动化抢票神器:如何用DamaiHelper告别演唱会门票焦虑
终极Python自动化抢票神器:如何用DamaiHelper告别演唱会门票焦虑 【免费下载链接】DamaiHelper 大麦网演唱会演出抢票脚本。 项目地址: https://gitcode.com/gh_mirrors/dama/DamaiHelper 在当今热门演出门票一票难求的时代,传统手动抢票方式已经…...
双指针-15. 三数之和
文章目录1.题解2.机考代码3.知识点讲解1.res.add(Arrays.asList(nums[i], nums[l], nums[r]));2.Arrays常用方法大厂机考 / 算法题里 Arrays 只需要掌握这 5 个1. Arrays.sort(nums) —— 排序(最常用)2. Arrays.toString(nums) —— 打印数组3. Arrays.…...
终极指南:如何用Ice打造清爽Mac菜单栏?2025年最强大的macOS菜单栏管理工具
终极指南:如何用Ice打造清爽Mac菜单栏?2025年最强大的macOS菜单栏管理工具 【免费下载链接】Ice Powerful menu bar manager for macOS 项目地址: https://gitcode.com/GitHub_Trending/ice/Ice Ice是一款强大的macOS菜单栏管理工具,它…...
如何通过Windows Cleaner实现C盘空间释放:提升系统性能的完整指南
如何通过Windows Cleaner实现C盘空间释放:提升系统性能的完整指南 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你是否经常遇到C盘爆红的困扰&#…...
Virtuoso-DFF:从原理图到功能测试的全面解析
1. Virtuoso-DFF设计原理全解析 在数字电路设计中,D触发器(DFF)是最基础也最重要的存储单元之一。Virtuoso作为业界领先的集成电路设计工具,其DFF实现方式具有典型性和参考价值。我们先从最基础的结构说起。 一个标准的DFF通常由传…...
Catia学习教程
写在前面 自学Catia的时候发现大部分教程在隔壁B站,CSDN上教程比较少,记录一下自己的学习过程,要有一定的AutoCAD和Solidworks基础,很多指令是相似的。 一、软件简介 CATIA(Computer Aided Three-dimensional Intera…...
【项目实战】ESP8266 WiFi模块从零接入物联网 - 硬件连接、固件烧录与云端通信
1. ESP8266 WiFi模块入门指南 第一次拿到ESP8266这个小玩意儿时,我完全没想到它能在物联网领域掀起这么大风浪。这个比硬币大不了多少的模块,内置了完整的WiFi功能,价格还不到一杯奶茶钱。记得去年帮学弟调试毕业设计时,我们用ESP…...
别再让用户点‘拒绝‘了!微信小程序订阅消息 wx.requestSubscribeMessage 的完整避坑指南(附版本兼容代码)
微信小程序订阅消息实战:从用户拒绝到高授权率的完整策略 每次看到后台统计里那惨淡的订阅消息授权率,作为开发者的你是否感到无力?用户总是习惯性点击"拒绝",而你可能连解释的机会都没有。这不是你的代码有问题&#x…...
高等数学实战解析:定积分换元法与分部积分法的核心技巧
1. 定积分换元法的实战技巧 第一次接触定积分换元法时,我完全被那些符号变换绕晕了。直到后来在物理实验中遇到一个弹簧振子的能量计算问题,才真正明白这个方法的精妙之处。想象你手里拿着一根橡皮筋,想要测量拉伸它需要的总能量——这就是定…...
