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

How to set transform origin for QPainter In Qt

我正在使用 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)

但它不能正常工作! 我该怎么办?

我认为一种典型的解决方案是平移、旋转,然后绘制。这是 C++ 中的一个示例,它将在中心为 (50, 50) 并从 radius=0 延伸到 radius=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).

来获得所需的效果