Здраствуйте!
Пробую сделать линию с маркерами, с помощью которых можно менять точки.
void Line::hoverEnterEvent(QGraphicsSceneHoverEvent *)
{
	firstPointGrabber = new LineGrabber(this);
    firstPointGrabber->setPos(QPointF(line().p1().x() - firstPointGrabber->getWidth() / 2, line().p1().y() - firstPointGrabber->getWidth() / 2));
	firstPointGrabber->installSceneEventFilter(this);
	secondPointGrabber = new LineGrabber(this);
    secondPointGrabber->setPos(QPointF(line().p2().x() - secondPointGrabber->getWidth() / 2, line().p2().y() - secondPointGrabber->getWidth() / 2));
    secondPointGrabber->installSceneEventFilter(this);
}
В hoverEnterEvent создаю два маркера,
void Line::hoverLeaveEvent(QGraphicsSceneHoverEvent *)
{
	firstPointGrabber->setParentItem(0);
	secondPointGrabber->setParentItem(0);
	delete firstPointGrabber;
	delete secondPointGrabber;
}
в hoverLeaveEvent удаляю.
bool Line::sceneEventFilter(QGraphicsItem *watched, QEvent *event)
{
	LineGrabber *lineGrabber = dynamic_cast<LineGrabber *>(watched);
	if(lineGrabber == 0)
		return false;
	QGraphicsSceneMouseEvent *mouseEvent = dynamic_cast<QGraphicsSceneMouseEvent *>(event);
	if(mouseEvent == 0)
		return false;    
	switch(mouseEvent->type())
	{
	case QEvent::GraphicsSceneMousePress:
	{
		lineGrabber->setMode(LineGrabber::m_press);
		firstPointGrabber->setPoint(line().p1());
		secondPointGrabber->setPoint(line().p2());
    }
	break;
	case QEvent::GraphicsSceneMouseRelease:
	{
		lineGrabber->setMode(LineGrabber::m_release);
    }
	break;
	case QEvent::GraphicsSceneMouseMove:
	{
		lineGrabber->setMode(LineGrabber::m_move);
	}
	break;
	default:
		return false;
	}
    if(lineGrabber->getMode() == LineGrabber::m_move)
    {
        if(lineGrabber == firstPointGrabber)
        {
            setLine(QLineF(mouseEvent->scenePos(), secondPointGrabber->getPoint()));
            firstPointGrabber->setPos(mouseEvent->scenePos().x() - firstPointGrabber->getWidth() / 2, mouseEvent->scenePos().y() - firstPointGrabber->getWidth() / 2);
        }
        else
        {
            setLine(QLineF(firstPointGrabber->getPoint(),mouseEvent->scenePos()));
            secondPointGrabber->setPos(mouseEvent->scenePos().x() - secondPointGrabber->getWidth() / 2, mouseEvent->scenePos().y() - secondPointGrabber->getWidth() / 2);
        }
    }
	return true;
}
В sceneEventFilter отлавливаю событие нажатие, сохраняю начальные точки в маркерах и двигаю первую или вторую точку.
Пока линия находится на текущем месте работает все как надо, но если линию передвинуть, то получаются какие-то расстояния между точками и мышью, судя по всему проблемы с системой координат.