2010-05-30 36 views
15

我有一个衍生自QGraphicsView的类,其中包含QGraphicsItem衍生的元素。我想这些元素,只要将鼠标光标悬停在改变颜色,所以我实现hoverEnterEvent(和hoverLeaveEvent):QGraphicsItem不会收到鼠标悬停事件

void MyGraphicsItem::hoverEnterEvent(QGraphicsSceneHoverEvent* event) 
{ 
    update (boundingRect()); 
} 

但是,永远不会执行此事件处理程序代码。我明确地启用了鼠标跟踪功能:

MyGraphicsView::MyGraphicsView(MainView *parent) : 
    QGraphicsView(parent) 
{ 
    setMouseTracking(true); 
    viewport()->setMouseTracking(true); 
    ... 
} 

仍然没有运气。我究竟做错了什么?

回答

22

修正了它。我需要在我的QGraphicsItem派生类的构造函数中使用setAcceptHoverEvents(true)

+1

我有同样的问题,并且从我的'QGraphicsView'中删除'mouseMoveEvent'实现也是解决它的必要条件。现在我已经开始工作了,只要我找出一种方法让它不要吃掉'QEvent',我可以重新添加'mouseMoveEvent'。 – 2013-03-05 22:42:23

+0

非常感谢!你刚刚结束了极大的痛苦 – 2013-08-18 16:50:05

+0

@CoryKlein你找到了使用mouseMoveEvent和悬停事件的方法吗? – lena 2016-02-29 13:11:02

1

在我的情况下,悬停,如果我在执行的QGraphicsView类推翻mouseMoveEvent事件是行不通的。我解决了这个问题通过增加调用

QGraphicsView::mouseMoveEvent(event); 

其传播的事件父,这反过来又送了它到所有场景中的项目。