问题很简单!我希望使用QPainter
类这样的东西。
我不希望旋转值。但是使用QPainter::rotate
方法我得到的值是这样的(旋转格式)。
有人可以帮助我使用QPainter
答案 0 :(得分:2)
这是关于我将如何做的最简单的代码。假设我正在绘制一个小部件的paint事件:
#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));
}
}
答案 1 :(得分:2)
沿任何路径绘制没有公式的文字
创建路径
有一个类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));
}