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

一、前言

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);

QGraphicsItem器件移动及旋转相关问题_第1张图片
器件旋转不会改变器件的场景坐标,例如:假如上图器件的scenePos为(64,128),则不管你旋转到那个位置,它的scenePos始终为(64,128)


三、场景

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

QGraphicsItem器件移动及旋转相关问题_第2张图片
我使用了图元组合,使一个QGraphicsTextItem作为子图元,自定义图元LineElementItem作为父图元

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

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

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

QGraphicsItem器件移动及旋转相关问题_第3张图片
注意:旋转之后,父坐标系的坐标原点不会变(始终是红色圈圈)

你可能感兴趣的:(#,QT学习记录,qt)