【问题标题】:How to save QGraphicsItem sizes on screen while scaling view?缩放视图时如何在屏幕上保存 QGraphicsItem 大小?
【发布时间】:2021-04-27 08:06:41
【问题描述】:

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

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

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

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

如何管理?

【问题讨论】:

    标签: c++ qt qgraphicsview qgraphicsscene qgraphicsitem


    【解决方案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);
    }
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • Nope.Problem 在已缩放视图上移动光标时发生。视图应应用他的变换以正确设置 pos。
      猜你喜欢
      • 2017-03-28
      • 2011-09-18
      • 2013-11-28
      • 2023-03-22
      • 1970-01-01
      • 2021-01-24
      • 1970-01-01
      • 2016-12-08
      • 1970-01-01
      相关资源
      最近更新 更多