【问题标题】:How to use local coordinates to a QGraphicsItem如何将局部坐标用于 QGraphicsItem
【发布时间】:2015-02-08 14:01:41
【问题描述】:

我创建了一个自定义 qGraphicsRectItem,并将其添加到我的 qGraphicsScene 中。我想使用它的局部坐标向这个自定义矩形添加文本(即添加到 0,0 将项目放置在我的矩形的原点,无论它在我的场景中的什么位置) 当我尝试这样做时,它使用我场景的坐标系,并且文本出现在矩形之外。有什么想法吗?

  PackageRect::PackageRect(QString PackageName, qreal x, qreal y, qreal w, qreal h, QGraphicsItem *parent)
    :QGraphicsRectItem(x, y, w,  h, parent)
{

    QGraphicsTextItem *text = new QGraphicsTextItem(PackageName, this);
    text->setPos(0,0);
}

【问题讨论】:

    标签: qt qgraphicsview qgraphicsitem qgraphicsscene


    【解决方案1】:

    您尝试做的事情往往用于“分组”项目。

    有几个mapTo* 函数包括:

    http://doc.qt.io/qt-5/qgraphicsitem.html

    QPointF mapToItem(const QGraphicsItem * item, const QPointF & point) const
    QPointF mapFromItem(const QGraphicsItem * item, const QPointF & point) const
    QPointF mapFromScene(const QPointF & point) const
    QPointF mapToScene(const QPointF & point) const
    

    基本上,您调用映射函数的上下文会改变映射调用的行为。

    如果您在QGraphicsItem 的子类中,并且您调用this->mapToItem(myRect, QPointF(0,0));,它将根据矩形的坐标系返回一个值。

    同样,如果您在QGraphicsItem 的子类中,并且您调用this->mapFromItem(myRect, QPointF(0,0));,它将根据原始项目的坐标系返回一个值,其中0,0 是矩形的左上角.

    这里有更多关于坐标系的文档:

    http://doc.qt.io/qt-5/graphicsview.html#the-graphics-view-coordinate-system

    但是,如果您要将对象分组到 QGraphicsView 中,请将它们分组并四处移动。

    http://doc.qt.io/qt-5/graphicsview.html#item-groups

    http://doc.qt.io/qt-5/qgraphicsitemgroup.html#details

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      对于 setPos 做 0,0 但 x, y。 对我来说:

      rectText::rectText(QString PackageName, qreal x, qreal y, qreal w, qreal h, QGraphicsItem *parent)
          :QGraphicsRectItem(x, y, w,  h, parent)
      {
          QGraphicsTextItem *text = new QGraphicsTextItem(PackageName, this);
          text->setPos(x, y);
      }
      

      文本在框中。

      【讨论】:

      • 有了 x 和 y 坐标,你并不关心场景中的框在哪里,它位于矩形的原点。
      • 确实,它使用的是场景的坐标系,而不是Item的本地坐标系。
      猜你喜欢
      • 2015-08-25
      • 1970-01-01
      • 2021-09-29
      • 1970-01-01
      • 1970-01-01
      • 2020-01-09
      • 1970-01-01
      • 2019-05-06
      • 2013-05-04
      相关资源
      最近更新 更多