将 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);
现在 newPos
和 rect
在 itemChange()
函数中给我相同的坐标。
我有一个自定义 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);
现在 newPos
和 rect
在 itemChange()
函数中给我相同的坐标。