QGraphicsItem不接收鼠标悬停事件

Ton*_*ony 19 c++ events qt qgraphicsview qgraphicsitem

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

void MyGraphicsItem::hoverEnterEvent(QGraphicsSceneHoverEvent* event)
{
    update (boundingRect());
}
Run Code Online (Sandbox Code Playgroud)

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

MyGraphicsView::MyGraphicsView(MainView *parent) :
    QGraphicsView(parent)
{
    setMouseTracking(true);
    viewport()->setMouseTracking(true);
    ...
}
Run Code Online (Sandbox Code Playgroud)

不过,没有运气.我究竟做错了什么?

Ton*_*ony 27

固定它.我需要setAcceptHoverEvents(true)在我的QGraphicsItem-derived类的构造函数中使用.

  • 我遇到了同样的问题,因此必须从QGraphicsView中删除`mouseMoveEvent`实现来修复它。现在,我已经可以正常工作了,只要我想出一种不吃掉QEvent的方法,就可以重新添加mouseMoveEvent。 (2认同)

小智 7

就我而言,如果我在QGraphicsView类的实现中覆盖mouseMoveEvent,则悬停事件将不起作用。我通过添加一个调用来解决这个问题

QGraphicsView::mouseMoveEvent(event);
Run Code Online (Sandbox Code Playgroud)

它将事件传播到父级,父级又将其发送到所有场景项目。