Так,
Я рисую QPolygonF в области, которую я определяю. Область наследуется от QGraphicsView.
Я хочу, чтобы пользователь мог перемещаться по контрольным точкам QPolygonF и изменять многоугольник даже после того, как он был создан. Я не мог найти ссылки на то, как я мог это сделать.
Так как я рисую линии, чтобы закрыть и обозначить многоугольник, и в области рисования может быть гораздо больше вещей, очистить его и рисовать снова и снова не представляется правильным.
Кто-нибудь знает, как я мог решить это?
Спасибо !
Меня немного смущает вопрос, почему вы описываете, что ваша «область» наследуется от 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);
Перерисовка элемента при перемещении точки не должна быть проблемой.
Очистка и перерисовка всей сцены, вероятно, самый эффективный способ сделать это. Единственный другой вариант — попытаться вычислить минимальный ограничивающий прямоугольник многоугольника при его изменении и попытаться сделать недействительной только эту область, но на самом деле это то же самое. Рисование Qt чертовски быстро, особенно когда вы используете преимущества интеграции с opengl. Когда я начинаю беспокоиться о перерисовке всей сцены, я напоминаю себе, что видеоигры делают это постоянно. :П