如何在Qt中为QPainter设置变换原点

时间:2015-08-01 10:49:11

标签: qt rotation pyqt transform qpainter

我正在使用 PyQt 和更准确的QPainter来绘制线条。我需要围绕一个原点旋转这条线(就像时钟手柄一样),但我认为设置它是不可能的! 我发现setTransformOriginPoint但它对QPainter对象不起作用。 QTransformrotate无法设置可能影响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)

但它无法正常工作! 我该怎么办?

1 个答案:

答案 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旋转它。通过将您的通话更改为drawLinepaint.drawLine(center, center + des),您也可以获得所需的效果。