了解Qt的QTransform旋转功能

Mit*_*tch 5 c++ qt rotation coordinates

作为这个问题的结果,我想更多地了解Qt的QTransform::rotate功能.在文档中,它说:

QTransform&QTransform :: rotate(qreal angle,Qt :: Axis 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;
Run Code Online (Sandbox Code Playgroud)

输出:

QPolygonF(QPointF(3, 0) QPointF(3, 4) QPointF(2, 4) QPointF(2, 0) ) 
Run Code Online (Sandbox Code Playgroud)

例如,这个矩形:

原始矩形旋转

要旋转到此处:

新的矩形旋转

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

Ste*_*Chu 8

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

旋转确实逆时针旋转.但由于Y轴在Widget坐标中翻转,因此它变为顺时针方向.

如您所述,多边形与小部件无关.它确实旋转CCW,但您可以使用小部件坐标将其可视化.