QTransform 以图形中心旋转,旋转后的图形坐标如何获取
时间: 2024-05-18 10:18:15 浏览: 84
如果需要以图形中心为旋转中心旋转图形,并获取旋转后的图形坐标,可以按照以下步骤进行:
1. 获取图形对象的中心点坐标,可以通过QGraphicsItem的boundingRect()函数获取图形的边界矩形,然后再通过中心点坐标计算公式计算出中心点坐标。
2. 创建一个QTransform对象,并进行旋转变换。需要注意的是,这里的旋转角度应该是相对于中心点的旋转角度。
3. 调用QTransform对象的map()函数,将图形的每个顶点坐标映射到旋转后的坐标系中,得到旋转后的图形坐标。
示例代码如下:
```
QGraphicsItem* item = ...; // 获取图形对象
QRectF boundingRect = item->boundingRect(); // 获取图形的边界矩形
QPointF center = boundingRect.center(); // 计算得到图形的中心点坐标
qreal rotation = ...; // 获取需要旋转的角度
QTransform transform;
transform.translate(center.x(), center.y()); // 将中心点移动到坐标原点
transform.rotate(rotation); // 进行旋转变换
transform.translate(-center.x(), -center.y()); // 将中心点移动回原来的位置
QPolygonF polygon = item->mapToScene(item->boundingRect()); // 将图形的顶点坐标映射到场景坐标系中
QVector<QPointF> rotatedPoints;
for (int i = 0; i < polygon.size(); ++i) {
rotatedPoints.append(transform.map(polygon.at(i))); // 将每个顶点坐标进行旋转变换,并添加到 rotatedPoints 列表中
}
// rotatedPoints 中的坐标就是以图形中心为旋转中心旋转后的坐标
```
需要注意的是,如果图形还进行了平移或缩放等变换,需要在创建QTransform对象时将这些变换一起考虑进去。
阅读全文