Qt的QTransform提供了一些更优化的方法来使用这些静态方法构建翻译/缩放的QTransform矩阵:
- QTransform::fromScale
- QTransform::fromTranslate
现在我需要一个旋转的变换,我认为也有一个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开发人员忘记了这个。有什么使这不可能的吗?
最可能的原因是,创建和使用静态函数来创建旋转转换迫使始终链接数学库(对于sin(3)
和cos(3)
数学函数(,因此您可以使用特定的构造函数并自己使用它们。
顺便说一下,您可以使用其中一个构造函数来指定要用于矩阵元素的常量。 在使用转换库时,我通常会保留矩阵以供重用。