У меня есть прямоугольник, который используется в пределах QGraphicsItem
. Элемент добавляется в сцену и имеет предварительно определенное преобразование, так что он правильно отображает прямоугольник. Это было до сих пор так хорошо:QGraphicsItem - Ошибка трансформации объекта
QRectF rect;
QTransform transform;
QGraphicsPolygonItem box;
box.setTransform(transform);
box.setPolygon(rect);
qDebug() << rect;
qDebug() << transform;
qDebug() << transform.map(rect.topLeft());
qDebug() << transform.map(rect.topRight());
qDebug() << transform.map(rect.bottomRight());
qDebug() << transform.map(rect.bottomLeft());
qDebug() << transform.map(rect);
qDebug() << box.polygon();
qDebug() << box.scenePos();
выходы:
QRectF(34.2629,5.75334 40.4797x55.5691)
QTransform(type=TxProject, 11=8.39145 12=3.651e-16 13=-3.79358e-18 21=-11.232 22=1.24517 23=-0.00673223 31=731.81 32=58.3479 33=0.684533)
QPointF(1478.33, 101.443)
QPointF(2004.32, 101.443)
QPointF(2466.86, 495.792)
QPointF(1216.62, 495.792)
QPolygonF(QPointF(1478.33, 101.443) QPointF(2004.32, 101.443) QPointF(2466.86, 495.792) QPointF(1216.62, 495.792) QPointF(1478.33, 101.443))
QPolygonF(QPointF(34.2629, 5.75334) QPointF(74.7427, 5.75334) QPointF(74.7427, 61.3225) QPointF(34.2629, 61.3225) QPointF(34.2629, 5.75334))
QPointF(1069.06, 85.2375)
, как ожидалось; все работает нормально; обе вершины и сам элемент преобразуются правильно, что я могу проверить все с помощью функции map
. Это работало отлично для по меньшей мере 40 различных преобразований.
Однако, для всего другой матрицы преобразования я столкнулся с этим интересным результатом:
QRectF(29.8193,9.86656 29.6347x43.7413)
QTransform(type=TxProject, 11=-4.51027 12=2.57144e-16 13=-1.00432e-19 21=7.88867 22=0.184078 23=0.00360371 31=-511.257 32=-69.1552 33=-0.353853)
QPointF(1784.23, 211.56)
QPointF(2204.16, 211.56)
QPointF(2218.99, 369.009)
QPointF(1387.07, 369.009)
QPolygonF(QPointF(0, 0))
QPolygonF(QPointF(29.8193, 9.86656) QPointF(59.454, 9.86656) QPointF(59.454, 53.6079) QPointF(29.8193, 53.6079) QPointF(29.8193, 9.86656))
QPointF(1444.83, 195.435)
вершина преобразуется успешно; но элемент rect не смог. Он выводит (0, 0) для преобразования.
Я думал, что это должно быть ошибкой в рамках, так как она преобразует точку штрафа, но он просто не мог трансформировать элементы (я также имею много эллипсов, прямоугольники не могут быть трансформированы). Но когда я пытаюсь воспроизвести, я не мог; это происходит только с этой матрицей.
С map()
не работает, item.setTransform()
- который, я полагаю, использует map()
внутренне - также не делает. Предмет не отображается на сцене.
Для ясного видения я прикрепил вторую матрицу (транспонированную) здесь.
Что я здесь делаю неправильно? Прецизионная ошибка? 32-разрядные вопросы?
EDIT: копать вниз source, кажется, map
использует другой подход для различных типов, таких как QPointF
, QLineF
и т.д.