我正在尝试将鼠标悬停在父项上移动QGraphicsItem
。
BaseItem::BaseItem(const QRectF &bounds)
: theBounds(bounds), theMousePressed(false)
{
theLineItem = new LineItem(theBounds, this);
setAcceptHoverEvents(true);
}
和
void BaseItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
{
QPointF position = mapToScene( event->pos());
theLineItem->setPos( position);
}
但物品没有移动。有没有其他方法可以在不使用ItemIsMovable
标志的情况下使用鼠标移动来移动场景中的项目,因为我希望项目在调用父项目后移动?
答案 0 :(得分:1)
创建LineItem时,在其构造函数中将BaseItem作为父项传递。
在GraphicsItem上调用setPos,设置项目相对于其父项的位置,在这种情况下,它是BaseItem。
将event-> pos()映射到场景坐标是错误的。 event-> pos()返回接收对象的本地坐标中的位置,在本例中是BaseItem。
因此,您应该使用event-> pos()直接设置theLineItem的位置。
theLineItem->setPos(event->pos());
请注意,如果您确实想要在场景坐标中使用事件位置,那么已经有了一个功能: -
event->scenePos();
所以你不需要调用mapToScene。