为什么没有QTransform::fromRotate函数?

4
Qt的QTransform提供了一些更优化的方式来构造平移/缩放的QTransform矩阵,可以使用这些静态方法:

现在我需要一个旋转的变换,我认为也有一个 QTransform :: fromRotate 就好了。但是它不存在。

在我的案例中,我根据鼠标交互(如平移,缩放和旋转)来修改现有的变换。

void MapDrawingItem::wheelEvent(QWheelEvent* event)
{
    //Moving the hovered point to the top left point on screen
    m_view_transform *= QTransform::fromTranslate(-event->posF().x(), -event->posF().y());

    //Apply transformations accordingly
    if((event->modifiers() & Qt::ControlModifier) == Qt::ControlModifier)
        m_view_transform *= QTransform().rotate(event->delta() / 30.);
    else
    {
        auto factor = qPow(1.001, event->delta());
        m_view_transform *= QTransform::fromScale(factor, factor);
    }

    //Move the hovered point back to the mouse cursor
    m_view_transform *= QTransform::fromTranslate(event->posF().x(), event->posF().y());

    emit signalViewTransformChanged(m_view_transform);
    update();
}

这段代码运行正常,但我想用QTransform::fromRotate(...)替换QTransform().rotate(...)

为什么这个方法还不存在?我无法想象Qt开发人员会忘记这个。有没有什么原因导致这不可能实现?


只实现所需部分是很正常的...你可能可以提出这个建议,但我认为与此相关的实现问题存在一些困难。也许你不能将同一个矩阵用于不同的旋转,而必须使用非静态实例。但是QT是开源的,因此你可以查看源代码,以了解为什么他们用另一种方式实现。 - Luis Colorado
1个回答

0

最有可能的原因是,创建和使用静态函数来创建旋转变换会强制始终链接数学库(用于sin(3)cos(3)数学函数),因此您可以使用特定的构造函数并自己使用它们。

顺便说一下,您可以使用其中一个构造函数来指定要用于矩阵元素的常量。在使用变换库时,保留矩阵以供重复使用是非常常见的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接