Qt 用鼠标悬停移动QGraphicsItem

Qt 用鼠标悬停移动QGraphicsItem,qt,draggable,Qt,Draggable,我试图将鼠标悬停在父项上,移动一个QGraphicsItem BaseItem::BaseItem(const QRectF &bounds) : theBounds(bounds), theMousePressed(false) { theLineItem = new LineItem(theBounds, this); setAcceptHoverEvents(true); } 及 但是这个项目没有移动。是否有其他方法可以在不使用ItemIsMovabl

我试图将鼠标悬停在父项上,移动一个
QGraphicsItem

BaseItem::BaseItem(const QRectF &bounds) 
    : theBounds(bounds), theMousePressed(false) 
{
   theLineItem = new LineItem(theBounds, this);
    setAcceptHoverEvents(true); 
}


但是这个项目没有移动。是否有其他方法可以在不使用
ItemIsMovable
标志的情况下,通过鼠标移动场景中的项,因为我希望在调用该项后,该项将围绕父项移动?

创建LineItem时,在其构造函数中传递BaseItem作为父项

在GraphicsItem上调用setPos,设置项相对于其父项的位置,在本例中,父项是BaseItem

将事件->pos()映射到场景坐标在这里是错误的。event->pos()返回接收对象的本地坐标位置,在本例中为BaseItem

因此,您应该直接使用event->pos()设置LineItem的位置

请注意,如果您确实希望事件位置位于场景坐标中,则已有一个函数可用:-

event->scenePos();

因此,您不需要调用mapToScene。

创建LineItem时,在其构造函数中传递BaseItem作为父项

在GraphicsItem上调用setPos,设置项相对于其父项的位置,在本例中,父项是BaseItem

将事件->pos()映射到场景坐标在这里是错误的。event->pos()返回接收对象的本地坐标位置,在本例中为BaseItem

因此,您应该直接使用event->pos()设置LineItem的位置

请注意,如果您确实希望事件位置位于场景坐标中,则已有一个函数可用:-

event->scenePos();
所以您不需要调用mapToScene

event->scenePos();