问题很简单!我想要类似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