QPainter 在时钟上绘制数字
Posted
技术标签:
【中文标题】QPainter 在时钟上绘制数字【英文标题】:QPainter draw numbers on clock 【发布时间】:2016-01-08 09:15:41 【问题描述】:QPainter graduation(this);
pen.setWidth(2);
pen.setColor(Qt::white);
graduation.setPen(pen);
graduation.setRenderHint(QPainter::HighQualityAntialiasing);
graduation.translate(center.x(), center.y());
double newRadius = (width() - 50) / 2;
//qreal angleStep = 270 / m_stepsize;
for (int i = 0; i <= m_stepsize; i++)
graduation.save();
graduation.rotate(i * angleStep + 135);
graduation.drawLine(newRadius - 8, 0, newRadius, 0);
graduation.drawText(newRadius - 30, 0, "100");
graduation.restore();
我使用上面的代码在时钟上绘制数字。这是我得到的
但我想绘制如下图所示的数字。不能倒置。
谁能帮帮我。我了解旋转功能,这就是它发生在数字上的原因,但我不知道如何解决它。
【问题讨论】:
不要在graduation.rotate()上下文中使用drawText,而是手动计算位置并在那里绘制文本。 手动计算位置要困难得多,而且时间太长。 如果您发布您的解决方案会很有趣(可以回答您自己的问题)。 我的解决方案可以解决“颠倒”的问题,但它不能像我展示的时钟一样绘制。它看起来像这样:aeternusconsulting.com/wordpress/wp-content/uploads/2013/06/… 【参考方案1】:您可以手动计算位置并绘制未旋转的文本:
for (int i = 0; i <= m_stepsize; i++)
graduation.save();
graduation.rotate(i * angleStep + 135);
graduation.drawLine(newRadius - 8, 0, newRadius, 0);
graduation.restore();
double xpos=(newRadius - 30)*cos((i * angleStep + 135.)/360.*2.*3.14159);
double ypos=(newRadius - 30)*sin((i * angleStep + 135.)/360.*2.*3.14159);
graduation.drawText(xpos, ypos, "100");
【讨论】:
@user2652023 你能再试一次吗?缺少因子 2。 太好了。这是工作。非常感谢你。即使它仍然需要进行一些配置才能更准确地绘制。但是没有你的想法我做不到。再一次,我可能需要问你一些事情。我理解计算“(newRadius - 30)*cos((i * angleStep + 135.)/360.*2.*3.14159)”但为什么我们必须除以360 * 2 * 3.14159 @user2652023 内置的cos
和 sin
使用弧度 (0..2*pi) 而不是度 (0..360) 的角度,这就是角度需要的原因被转换。 PS:如果我的回答有效,其他用户可以看到您的问题已解决,请接受我的回答。
我现在明白了,非常感谢。我是***的新手。所以我只知道“接受”按钮,我已经做到了。很抱歉错过了这个。以上是关于QPainter 在时钟上绘制数字的主要内容,如果未能解决你的问题,请参考以下文章
使用 QPainter 在 QWidget 上绘制 QPixmap Rects
使用 QPainter 和 paintEvent 在 PYQT5 中的 QLabel 中包含的 Pixmap 上绘制圆圈