2014-08-28 2 views

답변

2
다음

나는 그것을 할 것입니다 방법에 대한 간단한 코드는 사용하여 첫 번째 이미지와 같은 값으로 원을 그리는 데 도움이 될 수 있습니다. 가정 나는 위젯의 페인트 이벤트에 그림입니다 :

#define PI 3.14159265 

[..] 

void Widget::paintEvent(QPaintEvent *event) 
{ 
    QPainter painter(this); 

    QPoint center = rect().center(); 
    painter.drawEllipse(center, 2, 2); 
    const int radius = 100; 
    // Draw semicircle with texts on every 30". 
    for (double i = .0; i <= 180.0; i += 30.0) { 
     QPoint p(center.x() + radius * cos(i * PI/180.0), 
       center.y() - radius * sin(i * PI/180.0)); 
     painter.drawText(p, QString::number(i)); 
    } 
} 
2

어떤 경로를 따라 공식없이 텍스트를 그립니다

ArcCubic
사용하여 경로 있습니다
클래스 QPainterPath 만들기 여러 경로를 사용하여 경로를 그릴 수 있습니다.
귀하의 경우에는 arcTo을 사용할 수 있습니다. 경로 시작 지점이 있습니다

QPainterPath path; 
path.arcTo(rect, 210, -240.0); 

가 조금 어려움이 있습니다 출발점
을 계산합니다. arcTo으로 전화하면 호의 시작 부분에 선이 생겨 호가 그려집니다. 따라서 moveTo을 호출하고 호의 시작점을 인수로 전달해야합니다. 하지만 어디서 구할 수 있니? 호 공식을 사용하여 계산 하시겠습니까? 아니요. 근원을 실험하고 대략적인 점을 설정하거나 책을 열고 곡선의 수식을 찾을 수는 있지만 출발점을 쉽게 알 수있는 방법이 있습니다. 크기가 0 인 곡선을 그려 마지막 점을 얻으십시오. :

QPainterPath initialPath; 
initialPath.arcTo(rect, 210, 0); 
path.moveTo(initialPath.currentPosition()); 

텍스트
을 그립니다 당신은 당신이 pointAtPercent를 사용하여 경로의 요점을 파악하고 거기에 텍스트를 페인트 drawText를 사용하여이 경로를해야합니다. 여기
은 아래 코드는 아크와 숫자를 그릴 수 있습니다 :

QPainter p(this); 

    p.drawArc(rect(), 210 * 16, -240 * 16); 

    QRectF rect(20, 20, width() - 40, height() - 40); 

    QPainterPath initialPath; 
    initialPath.arcTo(rect, 210, 0); 

    QPainterPath path; 
    path.moveTo(initialPath.currentPosition()); 
    path.arcTo(rect, 210, -240.0); 

    for (int i = 0; i <= 10; i += 1) 
    { 
     p.drawText(path.pointAtPercent((qreal)i/10), QString::number(i)); 
    }