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().rotate(...)
替换为QTransform::fromRotate(...)
为什么这种方法不存在?我无法想象Qt开发人员忘了这个。有什么能让这个变得不可能吗?
答案 0 :(得分:0)
最可能的原因是创建和使用静态函数来创建旋转变换会强制始终链接数学库(对于sin(3)
和cos(3)
数学函数),所以你可以使用特定的构造函数并自己使用它们。
顺便说一下,您可以使用其中一个构造函数来指定用于矩阵元素的常量。在使用转换库时,保留矩阵以便重用是很常见的。