Qt에서 호 그리는 방법 - QPainterPath 활용
arcTo의 함수 인자로 세 개를 받는다.
arcTo(const QRectF &rectangle, qreal startAngle, qreal sweepLength)
첫 번째 인자인 rectangle은 원 모양이 채워질 사각형이다. rectangle의 x,y위치에서 시작해서 width, height 크기의 가상의 사각형이 있다고 하면 그 안에 arc를 채우게 된다.
두 번째 인자인 startAngle은 시작 각도이다. 여기에서 기준 각도는 시계의 3시이다. 시계의 3시에서 반시계 방향으로 어느 각도에서 호를 그릴 것인지 알려준다.
세 번째 인자는 sweepLength이다. 구글 이미지를 검색해보면 선풍기 같은 팬의 너비를 가리킨다. 여기서는 호를 얼만큼 그릴 것인지 각도로 나타낸다. 이게 음수이면 시계방향이고, 양수이면 반시계방향이다.
아래 코드 예시를 보는게 이해가 빠르다.
(1) 호를 그리기 시작할 좌표로 이동시킨다. (30,130)
(2) 호를 그린다. 180도의 위치에서 시작해서 반시계 방향으로(양수니까) 60도만큼 그린다.
(3) 중심 좌표까지 라인을 그린다.
(1),(2),(3)의 코드가 그리는 좌표를 그림이랑 매칭하면 이해하기 수월하다.
두 번째 인자 startAngle이 조금 헷갈릴 수 있는데 아래 예시를 더 보자
예시1.
path.arcTo(rect, 0, 30);
기준 시작 각도인 3시 위치에서 30도를 그린다.
예시2.
path.arcTo(rect, 180, 30);
기준 시작 각도인 3시에서 180도 떨어진 곳을 시작으로 30도 그린다.
참고용 코드
path.moveTo(50,50); //(1)
path.arcTo(QRectF(50, 50, 100, 100), 60, 240); //(2)
path.closeSubpath();
(1) (50,50) 좌표로 이동한다.
(2) QRectF 크기의 정사각형을 채우는 호를 그린다.
시작 위치는 3시에서 반시계 방향으로 60도 떨어진 곳에서 시작하여
240도만큼 그린다.
마지막에 중심 좌표로 이동하는 코드를 놓쳤더니 이렇게 그려졌다.