2013-10-23 2 views
0

그래서 내가 정의한 영역에 QPolygonF를 그립니다. 이 영역은 QGraphicsView에서 상속받습니다.그림에서 이미 그린 QPolygonF 크기 조절

내가 할 수있게하려면 사용자가 QPolygonF의 제어점을 중심으로 이동하고 다각형을 만든 후에도 변경되도록해야합니다. 내가 어떻게이 일을 할 수 있는지에 대한 언급을 찾을 수 없었다.

다각형을 닫고 나타 내기 위해 선을 그으므로 드로어 블 영역에 더 많은 것들이있을 수 있으므로 지우고 반복해서 그리는 것이 옳은 것처럼 보입니다.

아무도 내가 이것을 해결할 수있는 방법을 알고 있습니까?

감사합니다.

답변

1

'영역'이 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); 

점은 문제가되지 않습니다 이동할 때 항목을 다시 그리기.

+0

그래, 그게 내 마음에 왔어.하지만 마우스 움직임으로 인해 다각형에서 어떤 점이 움직이는지를 지시하고 싶다. 나는 마우스가 움직이면서 계속해서 모든 것을 그려 나가고 싶지 않았다. 그래서 단 한 개의 폴리곤 (새로운 포인트가있는)을 그리는 방법이 있다면 그 폴리곤 (이전 포인트)의 이전 인스턴스를 제거하고 다른 것은 제거하지 않을지 궁금합니다. – navderm

+0

Polygon의 포인트를 업데이트하고 위젯에서 update()를 호출하면 위젯과 그 내용 만 다시 그려집니다. 비디오 게임은 백 버퍼를 사용하여 전체 화면을 다시 그리는 것이 훨씬 빠르고 쉽다는 사실이 깨질 때까지 동일한 '더티 사각형'방법을 사용했습니다. Qt도 마찬가지이므로 위젯에서 update를 호출하여 Qt가 처리하도록하십시오. 다시 그리는 데 문제가있는 경우 코드를 최적화하는 방법을 살펴볼 수 있습니다. – TheDarkKnight

0

전체 장면을 지우고 다시 그려 보는 것이 가장 효과적인 방법 일 것입니다. 유일한 다른 옵션은 변경 될 때 폴리곤의 최소 경계 사각형을 계산하고 그 영역 만 유효하게하려고 시도하는 것이지만, 사실은 똑같습니다. Qt 드로잉은 특히 opengl 통합을 활용할 때 매우 빠르다. 전체 장면을 다시 그리는 것에 대해 걱정하기 시작할 때 나는 비디오 게임이 항상 그 일을한다는 것을 상기시킨다. : P

+0

특정 지역을 무효화하려면 어떻게해야합니까? 어쨌든 그것은 여전히 ​​다른 폴리곤을 그려야 만하는 문제를 해결하지 못합니다. 무효화 영역은 다른 폴리곤도 포함 할 수 있습니다. – navderm