問題很簡單!我想要類似QPainter
類的東西。 如何在不使用旋轉的情況下使用QPainter類在圓上寫一個值?
我不希望值被旋轉。但使用QPainter::rotate
方法我得到這樣的值(旋轉格式)。
有人可以幫我畫的圓,就像使用QPainter
問題很簡單!我想要類似QPainter
類的東西。 如何在不使用旋轉的情況下使用QPainter類在圓上寫一個值?
我不希望值被旋轉。但使用QPainter::rotate
方法我得到這樣的值(旋轉格式)。
有人可以幫我畫的圓,就像使用QPainter
這裏是我會怎麼做最簡單的代碼的第一個圖像值。假設我畫一個小部件的油漆事件:
#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));
}
}
沿着任何路徑繪製文本,而不公式
使用創建路徑
有一類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));
}
它是一個圓形或橢圓形? – vahancho 2014-08-28 13:42:17