将 QGraphicsItem::pos() 转换为场景坐标

Convert QGraphicsItem::pos() to scene coordinates

我有一个自定义 QGraphicsItem 覆盖 QGraphicsItem::itemChange() 像这样

QVariant CustomItem::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value)
{
    if (change == QGraphicsItem::ItemPositionChange) {
        QPointF newPos = value.toPointF();
        QRectF rect = mapRectToScene(boundingRect());

        qDebug() << "newPos" << newPos;
        qDebug() << "rect" << rect;
    }
    return QGraphicsItem::itemChange(change, value);
}

newPos的(0, 0)位于创建item的位置,而rect的(0, 0)位于场景的左上角;

我想转换 newPos,使其与 rect 位于同一坐标系中。 我尝试了 QGraphicsItem 中的所有 mapTo / mapFrom 函数,但没有任何效果。

有人能帮忙吗?谢谢

好的,我认为我已经解决了我的问题。我忘了提到的是我的项目是这样初始化的:

auto item = new CustomItem(QPolygonF(QRectF(70, 70, 100, 100)));

我解决问题的方法是首先在 (0, 0) 处初始化项目,然后使用 QGraphicsItem::moveBy() 而不是为项目的构造函数提供位置。

auto item = new CustomItem(QPolygonF(QRectF(0, 0, 100, 100)));
item->moveBy(70, 70);

现在 newPosrectitemChange() 函数中给我相同的坐标。