В результате этот вопрос , I' хотелось бы больше узнать о функции 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;
Выход:
QPolygonF(QPointF(3, 0) QPointF(3, 4) QPointF(2, 4) QPointF(2, 0) )
Например. для этого прямоугольника:
Повернуть сюда:
Почему это? Почему в документации говорится, что мой вызов QTransform::rotate
на самом деле вызывает вращение по часовой стрелке, когда я считаю, что не нахожусь в «координатах виджета» -здесь нет никаких виджетов.