创建自定义 QGraphicsItem 时拦截鼠标事件

Posted

技术标签:

【中文标题】创建自定义 QGraphicsItem 时拦截鼠标事件【英文标题】:intercept mouse events when creating a custom QGraphicsItem 【发布时间】:2011-01-21 18:54:52 【问题描述】:

我使用的是标准的 QGraphicsView 和 QGraphicsScene,但我已将 QGraphicsPixmapItem 子类化为我自己的 ImagePixmapItem,以便能够在 ImagePixmapItem 上使用鼠标事件。

我需要做什么才能捕获这些事件?我已经覆盖了几个这样的函数:

   void ImagePixmapItem::mousePressEvent(QGraphicsSceneMouseEvent *event)

       qDebug("hello");

   

void ImagePixmapItem::wheelEvent ( QGraphicsSceneWheelEvent * event )
    qDebug("Print this line if catch a wheelEvent");//this is never printing


但是,这些 qDebug 语句都不会打印到控制台。我是否需要更改有关我的场景或图形视图的任何其他内容?在 ImagePixmapItem 的构造函数中,我确实添加了一些东西:

setAcceptHoverEvents(true);
setFlag(QGraphicsItem::ItemIsSelectable,true);

但它没有做任何好事。

【问题讨论】:

您能告诉我们您是如何将这些项目添加到 QGraphicsScene 的吗? 【参考方案1】:

您可以使用事件过滤器。

http://cartan.cas.suffolk.edu/qtdocs/eventsandfilters.html

我还要为您的原始示例添加这一点,请务必在相关小部件上启用鼠标跟踪。

【讨论】:

以上是关于创建自定义 QGraphicsItem 时拦截鼠标事件的主要内容,如果未能解决你的问题,请参考以下文章

将鼠标事件从 QGraphicsItem 传递给 QGraphicsScene

在 QGraphicsItem 中使用 QPainterPath 检测鼠标命中

QGraphicsItem在移动后没有留在原地

使用rubber Band选择QGraphicsItem

100分求助,Qt继承自QGraphicsItem的控件响应不了mousePressEvent事件怎么办?

使用 QPropretyAnimation 为自定义 QGraphicsItem 设置动画