我正在使用 PyQt 和更准确的QPainter
来绘制线条。我需要围绕一个原点旋转这条线(就像时钟手柄一样),但我认为设置它是不可能的!
我发现setTransformOriginPoint
但它对QPainter
对象不起作用。 QTransform
和rotate
无法设置可能影响QPainter
对象的原点。
此外,我尝试使用旋转方程式手动旋转线条......,这是代码:
def rotateLine(x, y, d):
d = math.radians(d)
x2 = x * math.cos(d) - y * math.sin(d)
y2 = x * math.sin(d) + y * math.cos(d)
return x2, y2
des = QPoint(400, 0)
for k in range(0, 10):
paint.drawLine(center, des)
newLine = rotateLine(des.x(), des.y(), 45)
des = QPoint(newLine[0], newLine[1])
logging.warning(des)
但它无法正常工作! 我该怎么办?
答案 0 :(得分:2)
我认为一种典型的解决方案是翻译,旋转,然后绘制。这是C ++中的一个示例,它将在中心位于(50,50)并从半径= 0延伸到半径= 400的时钟上绘制像手一样的线,它们之间有45°。
QPainter painter(this);
painter.save();
painter.translate(50, 50); // Center
for (int k = 0; k < 10; k++) {
painter.drawLine(0, 0, 400, 0);
painter.rotate(45); // Degrees
}
painter.restore();
旁注:您的rotateLine()函数对于旋转原点周围的给定点是正确的,但看起来您希望它围绕center
旋转它。通过将您的通话更改为drawLine
至paint.drawLine(center, center + des)
,您也可以获得所需的效果。