QGraphicsRectItem相对于场景的坐标

在Qt框架中,QGraphicsRectItem是一个代表矩形的图形项,其相对于场景的坐标可以通过以下方法获取:

坐标获取方法

  1. pos()方法
    • QGraphicsRectItem继承自QGraphicsItem,可以使用QGraphicsItem类的pos()方法来获取其在场景中的位置。
    • 这个方法返回一个QPointF对象,包含x和y坐标,表示图形项在其父坐标系统中的位置。对于添加到场景中的QGraphicsRectItem,这个父坐标系统就是场景坐标系。
  2. rect()方法
    • QGraphicsRectItem的rect()方法返回一个QRectF对象,描述了图形项的矩形边界。
    • 这个矩形边界是相对于图形项自身坐标系的。也就是说,它描述了图形项内部的矩形区域,但不考虑图形项在场景中的位置或任何应用的变换(如旋转或缩放)。

计算QGraphicsRectItem在场景中的坐标

要获取QGraphicsRectItem内的矩形在整个场景中的坐标,需要将矩形相对于图形项的位置(rect()方法返回)与图形项在场景中的位置(pos()方法返回)结合起来。具体步骤如下:

  1. 获取QGraphicsRectItem在场景中的位置

    QPointF posInScene = rectItem->pos();
  2. 获取QGraphicsRectItem内部的矩形坐标

    QRectF rectInItem = rectItem->rect();
  3. 计算矩形在场景中的坐标

    QRectF rectInScene(posInScene, rectInItem.size());

    或者,使用QRectF的translated()函数将矩形移动到场景中的位置:

    QRectF rectInScene = rectInItem.translated(posInScene);

注意事项

  • 局部坐标与场景坐标:QGraphicsRectItem的坐标有局部坐标和场景坐标之分。局部坐标是相对于图形项自身的,而场景坐标是相对于整个场景的。使用pos()方法获取的是场景坐标,使用rect()方法获取的是局部坐标。
  • 变换影响:如果QGraphicsRectItem上应用了变换(如旋转或缩放),则需要使用QGraphicsItem::sceneTransform()来获取变换矩阵,并将其应用到矩形的坐标上,以得到正确的场景坐标。

综上所述,通过结合pos()和rect()方法,可以轻松地获取QGraphicsRectItem相对于场景的坐标。

### QGraphicsView 中坐标原点的位置及操作 #### 场景、图元和视图中的坐标体系 在 `QGraphicsView` 构成的图形视图框架中,存在三种主要组件:`QGraphicsScene`(场景)、`QGraphicsItem`(图元)以及 `QGraphicsView`(视图)。每种组件都有自己的坐标系。 - **场景 (`QGraphicsScene`)** 场景拥有自身的坐标系,在此坐标系内可以放置各种图元。通常情况下,场景的 `(0, 0)` 点位于其左上角[^1]。 - **图元 (`QGraphicsItem`)** 图元使用的是本地坐标系,即相对于自身而言的坐标系统。对于大多数预定义类型的图元来说,默认的 `(0, 0)` 原点位置如下: - 对于矩形或椭圆形图元(`QGraphicsRectItem`, `QGraphicsEllipseItem`),`(0, 0)` 表示这些形状的左上角。 - 多边形(`QGraphicsPolygonItem`) 和路径(`QGraphicsPathItem`) 的 `(0, 0)` 则分别代表第一个顶点和路径起点。 - 自定义图元的 `(0, 0)` 完全依赖于开发者如何实现 `boundingRect()` 及 `paint()` 方法来决定[^2]。 - **视图 (`QGraphicsView`)** 视图负责展示整个场景的内容,并允许用户滚动查看超出当前窗口范围的部分。它同样具有独立的坐标系用于处理鼠标事件和其他交互行为。然而,当提到 “移动” 或者调整某个特定图元时,实际上是在改变该图元在其所属场景内的相对位置而不是直接影响到视图本身的坐标系[^5]。 #### 修改图元位置的方式 要改变图元在场景里的实际显示位置,可以通过调用 `setPos(x,y)` 函数设置新的坐标值给指定的图元实例。这会使得图元按照新设定的偏移量重新定位自己在场景中的位置。值得注意的是,这样做并不会影响到其他任何东西;只有被设置了的新位置会被更新。 下面是一个简单的例子展示了怎样创建一个矩形并将其移到不同的地方: ```cpp // 创建一个新的矩形项目,初始大小为宽高各50像素,中心点设为 (-25,-25) QGraphicsRectItem *rectItem = scene->addRect(-25, -25, 50, 50); // 将矩形项目的整体位置移动至 (75,75),这意味着它的中心现在处于 Scene 坐标系下的 (75,75) 点处 rectItem->setPos(75, 75); ``` 一旦执行上述代码片段之后,原本以 `-25,-25` 开始绘制的那个正方形将会出现在屏幕上的另一个位置 —— 即从原来的局部坐标转换到了全局坐标的 `(75,75)` 上面去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值