2015-04-13 3 views
0

У меня возникла проблема при повороте и изменении размера qgraphicsitem при его повороте. Я рисую два qgraphicsitems, чтобы изменить размер внутреннего qgraphicsitem. Когда я поворачиваю внутренний элемент в это время, я хочу найти все координаты внутреннего (повернутого) элемента, но когда я его вращаю, я получаю только сцену() этого элемента и никаких других точек, то есть он дает мне очки topLeft. Как показано на картинке enter image description hereКак вычислить координаты прямоугольника, если я знаю один координатный размер и угол поворота?

Я хочу найти все темные обведенные точки предмета. Эти предметы добавляются на сцену.

+0

Не могли бы вы использовать триггер, чтобы найти эти значения? – jbutler483

+0

Да, но как я могу использовать триггер, что вы можете объяснить формулой? –

+0

Не совсем ясно: у вас есть точка, соединяющая 'T' и' L' или верхнюю левую точку белого квадрата? –

ответ

0

QTransform. Что-то вроде этого:

QTransform t; 
t.rotate(angle); 
QPolygon polygon = t.mapToPolygon(rect) 
+0

Я не получаю точный прямоугольник, когда использую метод выше. Я передал rect как t.mapToPolygon (QRect (QPoint (regFrame-> scenePos()), QSize (regFrame-> boundingRect(). Size()))); –

+0

Ну, результат этого метода не является прямым - это многоугольник, который состоит из точек. Подсказка из справки: 'Полигоны и прямоугольники ведут себя несколько иначе при преобразовании (из-за целочисленного округления), поэтому matrix.map (QPolygon (rectangle)) не всегда совпадает с matrix.mapToPolygon (rectangle) .' – Amartel

+0

Хорошо спасибо за ответ , –

0

без кода, показанного в этом вопросе, я буду считать, что у вас есть класс, который наследуется от QGraphicsItem и вы рисуете прямоугольник в функции рисования.

Это означает, что вы возвращаете ограничивающий прямоугольник элемента в его соответствующую функцию boundingRect.

Как вы, вероятно, обнаружили, ограничивающий прямоугольник не вращается с вращением элемента.

Если вы реализуете функцию shape, вы сможете вызвать ее, чтобы получить точки многоугольника через QPainter::toFillPolygon, проходящие в текущем преобразовании элемента.

Смежные вопросы