我有地图(QGraphicsPixmapItem)和光标(QGraphicsItem的继承者,只是交叉)。
对于光标,我设置了 QPen::setCosmetic(true)
当一个场景放大/缩小QGraphicsView::scale()
时,光标保持正确的位置和线宽,但也会改变自己的大小。
如果激活 QGraphicsItem::ItemIgnoresTransformations
则线宽和大小是正确的,但 pos 是错误的。
如何管理它?
答案 0 :(得分:1)
解决办法:
将视图转换传递给您的项目。
重新实现的方法 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);
}
答案 1 :(得分:0)
保持 QGraphicsItem::ItemIgnoresTransformations 标志并尝试缩放位置。这应该可以解决问题。
const auto& pos = cursor->pos();
const QPointF newPos(pos.x() * scaleX, pos.y() * scaleY);
view->scale(scaleX, scaleY);
cursor->setPos(newPos);