如何在 Qt 中为 QPainter 设置变换原点
How to set transform origin for QPainter In Qt
我正在使用 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)
但它不能正常工作!
我该怎么办?
我认为一种典型的解决方案是平移、旋转,然后绘制。这是 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)
.
来获得所需的效果
我正在使用 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)
但它不能正常工作! 我该怎么办?
我认为一种典型的解决方案是平移、旋转,然后绘制。这是 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)
.