【问题标题】:How to set transform origin for QPainter In Qt如何在 Qt 中为 QPainter 设置变换原点
【发布时间】:2015-08-01 10:49:11
【问题描述】:

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

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

【问题讨论】:

    标签: qt rotation pyqt transform qpainter


    【解决方案1】:

    我认为一种典型的解决方案是平移、旋转,然后绘制。这是一个 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) 来获得所需的效果。

    【讨论】:

    • 非常感谢!重点是转换Qpainter 对象,而不是转换QTransform
    猜你喜欢
    • 2011-10-06
    • 2014-07-23
    • 1970-01-01
    • 2018-05-03
    • 2015-02-05
    • 2018-11-26
    • 2011-04-07
    • 2020-11-26
    • 1970-01-01
    相关资源
    最近更新 更多