6

由于这个问题,我想更多地了解 Qt 的QTransform::rotate功能。在文档中,它说:

QTransform & QTransform::rotate ( qreal 角度, Qt::Axis 轴 = Qt::ZAxis )

将坐标系绕指定轴逆时针旋转给定角度,并返回对矩阵的引用。

请注意,如果将 QTransform 应用于在小部件坐标中定义的点,则旋转方向将是顺时针方向,因为 y 轴指向下方。

角度以度数指定。

从我之前的问题中,我了解到要QPolygonF顺时针旋转,我实际上必须将它逆时针旋转 90 度,根据rotate函数:

QPolygonF original = QPolygonF() << QPoint(0, 1) << QPoint(4, 1) << QPoint(4, 2) << QPoint(0, 2);
QTransform transform = QTransform().translate(2, 2).rotate(90).translate(-2, -2);
QPolygonF rotated = transform.map(original);
qDebug() << rotated;

输出:

QPolygonF(QPointF(3, 0) QPointF(3, 4) QPointF(2, 4) QPointF(2, 0) ) 

例如对于这个矩形:

原始矩形旋转

旋转到这里:

新的矩形旋转

为什么是这样?当我相信我不在“小部件坐标”中时,为什么文档说我的调用QTransform::rotate实际上导致了顺时针旋转 - 这里没有涉及小部件。

4

2 回答 2

8

QTransform 在数学笛卡尔坐标系中运行。IE。右上角的象限是正 x 和正 y 的一个(象限 1)。您的图表位于 y 轴翻转的 Widget 坐标中,右下角为象限 1。

Rotate 确实逆时针旋转。但是由于 Y 轴在 Widget 坐标中是翻转的,所以它变成了顺时针方向。

正如您所提到的,多边形与小部件无关。它确实逆时针旋转,但您正在使用小部件坐标对其进行可视化。

于 2012-04-17T15:00:17.817 回答
3

实际上我认为问题在于所讨论的函数旋转坐标系 - 而不是对象。如果要顺时针旋转对象,则相当于逆时针旋转坐标系。

于 2012-10-16T19:58:56.460 回答