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

Qt: QGraphicsView二维图形绘图框架

坐标

主要坐标包含三类:
QGraphicsView坐标: 	视图坐标,即显示窗口的坐标,和屏幕尺寸是1:1
QGraphicsScene坐标:	场景坐标,被观察场景的坐标,通过缩放和平移比例可以转换为视图坐标 
QGraphicsItem坐标:  	图形项坐标,每一个图形项都有一个自己的坐标系,有可能是这个图形项的左上角也可能是中心。由这个图形项的boundingRect()定义

以上三个坐标系相互独立。可以通过trans()转换矩阵进行转换。

坐标转换:
视图到场景:view->mapToScene(QPoint);//这里注意视图坐标是int型,对应屏幕的像素
场景到视图:view->mapFromScene(QPointF);//场景坐标是double,可以有亚像素
场景到图形项:QPointF QGraphicsItem::mapFromScene(qreal ax, qreal ay)。item->mapFromScene(scene_pos);//讲一个场景的坐标转换到图形项坐标系下
图形项到场景:QPointF QGraphicsItem::mapToScene(qreal ax, qreal ay)。item->mapToScene(item_pos);将图形项的坐标转换为场景坐标
坐标设置和获取
  1. 设置:推荐使用setPos()

使用 setPos() 方法 该方法用于设置 QGraphicsItem 在其父项坐标系中的位置;默认直接添加在场景中的图形项设置的就是item在场景中的坐标;

item->setPos(x, y); // 设置左上角坐标为 (x, y)

使用 setRect() 方法(对于 QGraphicsRectItem) 如果你使用的是 QGraphicsRectItem,可以通过 setRect() 同时设置位置和大小

rectItem->setRect(x, y, width, height); // 设置位置和大小;这里设置的位置坐标系是rectItem的坐标系,//不过改变rectItem在scene下的坐标。但是这里设置后再显示效果上和setPos()是一样的
  1. 获取:推荐使用scenePos()。

使用 pos() 方法 该方法返回 QGraphicsItem 在其父项坐标系中的位置

QPointF position = item->pos();//若item已经添加在场景中,则pos和scenePos相同

使用 scenePos() 方法 该方法返回 QGraphicsItem 在场景坐标系中的绝对位置。

QPointF scenePosition = item->scenePos();

示例1:获取鼠标所在的位置是否在某一个QGraphicsRectItem中

    QPoint view_pos = event->pos();//从事件中获取鼠标的view坐标QPointF scene_pos = this->mapToScene(view_pos);//view坐标转换为scene坐标QPointF rect_pos = rect_item->mapFromScene(scene_pos );//将scene坐标转换为item坐标系下的坐标rect_item->contains(rect_pos);//使用rect的contains函数进行判断

http://www.mrgr.cn/news/14612.html

相关文章:

  • 机器学习 之 决策树与随机森林的实现
  • 速盾:如何选择适合企业的高防 IP 和 CDN?
  • 宝洁校招笔试测评游戏化测评题型揭秘
  • Python知识点:如何使用HBase与HappyBase进行分布式存储
  • 《数据中心质量保证方案》- 202408版
  • 拓扑排序学习笔记
  • 大模型书籍推荐丨不会大模型私有化部署?这本大模型权威教材必看!(附PDF文档)
  • sqli-labs靶场通关攻略(26-30关)
  • C语言中的int argc, char *argv[]是什么?
  • Git中pull和fetch的区别
  • 从 MLOps 到 LMOps 的关键技术嬗变
  • [线程]等待一个线程, 获取当前线程引用,休眠当前线程, 线程的六种状态
  • (十九)Flink CDC
  • 麒麟信安系统下使用coredump调试应用程序
  • 【React】为什么Hooks不能出现在判断中
  • ArcGIS栅格裁剪与合并,制作等高线
  • 基于计算机视觉的图书推荐应用【AI编程实录】
  • 沾包问题,wireshark和netstat的使用
  • 程序员的自我修炼:如何拒绝快餐式学习,深耕技能20240829
  • 22AP10 SS524 平替 海思HI3521DV200 可提供开发资料