由于这个问题,我想更多地了解 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
实际上导致了顺时针旋转 - 这里没有涉及小部件。