QGraphicsItem器件移动及旋转相关问题

发布时间:2023年12月29日

一、前言

Qt的图形视图框架中,可以使用如下接口设置图元坐标:

void QGraphicsItem::setPos(const QPointF &pos)

Sets the position of the item to pos, which is in parent coordinates. For items with no parent, pos is in scene coordinates.
The position of the item describes its origin (local coordinate (0, 0)) in parent coordinates.

官方注释:在父坐标系中根据坐标pos设置图元的位置。如果图元没有父图元,pos就是场景坐标系。


Qt的图形视图框架中,可以使用如下接口设置父子层级:

void QGraphicsItem::setParentItem(QGraphicsItem *newParent)

当然,也可以从构造函数中传递参数设置父子层级


二、器件旋转

Qt的图形视图框架中,可以使用如下接口设置图元旋转:

void setRotation(qreal angle);

在这里插入图片描述
器件旋转不会改变器件的场景坐标,例如:假如上图器件的scenePos为(64,128),则不管你旋转到那个位置,它的scenePos始终为(64,128)


三、场景

现在我有一个器件,需要显示器件ID,就像这样:

在这里插入图片描述
我使用了图元组合,使一个QGraphicsTextItem作为子图元,自定义图元LineElementItem作为父图元

如果使用setPos,图元LineElementItem应该是相对于场景坐标系进行移动,图元QGraphicsTextItem应该是相对于父图元LineElementItem的坐标系进行移动

我现在要旋转器件,要让器件ID始终保持在一个合适的位置,所以旋转完器件之后,需要进行ID位置校正

在这块卡了一下,反复测试发现,旋转完,父图元的坐标系也进行了旋转,如下图示:

在这里插入图片描述
注意:旋转之后,父坐标系的坐标原点不会变(始终是红色圈圈)

文章来源:https://blog.csdn.net/Mr_robot_strange/article/details/135293235
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。