QGraphicsItem无法接收鼠标悬停事件。

23

我有一个派生自QGraphicsView的类,其中包含QGraphicsItem派生元素。当鼠标光标悬停在这些元素上时,我希望它们能够改变颜色,因此我实现了hoverEnterEvent(和hoverLeaveEvent):

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

然而,这个事件处理程序代码从未被执行。我已经明确启用了鼠标跟踪:

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

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

2个回答

38

问题已解决。我需要在继承自QGraphicsItem的类的构造函数中使用setAcceptHoverEvents(true)方法。


4
我曾经遇到过同样的问题,从我的QGraphicsView中删除mouseMoveEvent实现也是解决它所必需的。现在我已经解决了这个问题,只要我找出一种不会吞噬QEvent的方法,我可能可以重新添加mouseMoveEvent - Cory Klein
非常感谢!你刚刚结束了巨大的痛苦。 - Freedom_Ben
@CoryKlein 你找到同时使用mouseMoveEvent和hover事件的方法了吗? - lena
@lena 老实说,我不记得了。 - Cory Klein

7

在我的情况下,如果我覆盖了 QGraphicsView 类的 mouseMoveEvent 方法,则悬停事件将不起作用。我通过添加调用来解决这个问题:

QGraphicsView::mouseMoveEvent(event);

该事件向父级传播,然后由父级发送到所有场景元素。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接