Масштабирование уже нарисованного QPolygonF на чертеже

Так,
Я рисую QPolygonF в области, которую я определяю. Область наследуется от QGraphicsView.

Я хочу, чтобы пользователь мог перемещаться по контрольным точкам QPolygonF и изменять многоугольник даже после того, как он был создан. Я не мог найти ссылки на то, как я мог это сделать.

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

Кто-нибудь знает, как я мог решить это?

Спасибо !

0

Решение

Меня немного смущает вопрос, почему вы описываете, что ваша «область» наследуется от QGraphicsView, но затем обсуждаете QPolygonF. Если вы используете QGraphicsView, это означает, что у вас есть QGraphicsScene и вы будете использовать QGraphicsPolygonItem.

Однако, с предположением, что QGraphicsView здесь не имеет значения, QPolygonF — это просто класс, который наследуется от вектора точек; QVector.

Вы должны иметь возможность перебирать точки и просто перемещать их туда, куда хотите. Вы можете получить точку, как это: —

QPolygonF poly; // assume it has been given a number of points
QPointF& point = poly[index]; // where index is the index into the QVector of points

Тогда вы можете переместить точку: —

point.SetX(xPos);
point.SetY(yPos);

Перерисовка элемента при перемещении точки не должна быть проблемой.

1

Другие решения

Очистка и перерисовка всей сцены, вероятно, самый эффективный способ сделать это. Единственный другой вариант — попытаться вычислить минимальный ограничивающий прямоугольник многоугольника при его изменении и попытаться сделать недействительной только эту область, но на самом деле это то же самое. Рисование Qt чертовски быстро, особенно когда вы используете преимущества интеграции с opengl. Когда я начинаю беспокоиться о перерисовке всей сцены, я напоминаю себе, что видеоигры делают это постоянно. :П

0

По вопросам рекламы [email protected]