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函数进行判断
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值