缩放视图时如何在屏幕上保存 QGraphicsItem 大小?

问题描述

我有地图(QGraphicspixmapItem)和光标(QGraphicsItem的继承者,只是交叉)。

对于光标,我设置了 QPen::setCosmetic(true)

一个场景放大/缩小QGraphicsView::scale()时,光标保持正确的位置和线宽,但也会改变自己的大小。

如果激活 QGraphicsItem::ItemIgnoresTransformations 则线宽和大小是正确的,但 pos 是错误的。

如何管理它?

解决方法

解决办法: 将视图转换传递给您的项目。 重新实现的方法 setPos 应该是这样的:

void YourItem::setPos(const QPointF & pos)
{
    auto centerItem = m_boundRect.center(); //boundRect of your item
    centerItem.rx() /= m_viewTransf.m11();
    centerItem.ry() /= m_viewTransf.m22();
    QGraphicsItem::setPos(pos - centerItem);
}
,

保持 QGraphicsItem::ItemIgnoresTransformations 标志并尝试缩放位置。这应该可以解决问题。

const auto& pos = cursor->pos();
const QPointF newPos(pos.x() * scaleX,pos.y() * scaleY);
view->scale(scaleX,scaleY);
cursor->setPos(newPos);