2014-08-28 18 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並傳遞弧的起點作爲參數。但是,你可以在哪裏得到它?使用弧的公式計算?可以嘗試並設置一個近似點或打開一本書並找到任何曲線的公式,但有一個簡單的方法可以知道一個起點:繪製一個零尺寸曲線並獲取它的最後一點:

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)); 
    } 
相關問題