2013-11-19 3 views
1

Я пытаюсь переместить QGraphicsItem с наведением курсора мыши над родительским элементом.Перемещение 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, потому что я хочу, чтобы элемент перемещался вокруг родительского элемента, как только он вызывается?

ответ

1

Когда вы создаете LineItem, в его конструкторе вы передаете BaseItem в качестве родителя.

Вызов setPos на GraphicsItem устанавливает положение элемента относительно его родителя, который в данном случае является базовым.

Несоответствие координаты события-> pos() в координатах места. event-> pos() возвращает позицию в локальных координатах принимающего объекта, которая в этом случае является BaseItem.

Следовательно, вы должны установить положение theLineItem напрямую с помощью event-> pos().

theLineItem->setPos(event->pos()); 

Обратите внимание, что если вы действительно случалось хотеть положение события в координатах сцены, есть функция уже доступна: -

event->scenePos(); 

Таким образом, вы не нуждались бы назвать mapToScene.

Смежные вопросы