当 QGraphicsTextItem 发送时,QGraphicPixmapItem 双击事件不会转到父小部件

QGraphicPixmapItem double click event does not go to parent widget while QGraphicsTextItem send

我在 Qt 中有一个主要的小部件,这个小部件包含一个 QGraphicsView 和里面的 QGraphicsScene。在场景中,我添加了 QGraphicsPixmapItems 和 QGraphicsTextItems。在我处理 QWidget::mouseDoubleClickEvent ( QMouseEvent * event ) 的主要小部件中,我的项目都设置了标志:

mItem->setFlag ( QGraphicsItem::ItemIsMovable );
mItem->setFlag ( QGraphicsItem::ItemIsSelectable );
mItem->setFlag ( QGraphicsItem::ItemIsFocusable);

因为我想移动场景中的项目和 select 它们,而且我还想在双击发生时由主小部件处理。当我双击 QGraphicsTextItem 时,它会进入主窗口小部件中的 mouseDoubleClickEvent,但是当我双击 QGraphicsPixmap 项目时,它吸收双击并且不会将其发送到主窗口小部件。此外,当未设置 ItemIsFocusable 标志时,QGraphicsTextItem 也会吸收双击事件。为什么会发生?
我不想实现 QGraphicsItem 的子类,而是想使用已经定义的方法。这是我所做的图片:

我找到了一个解决方案,因为我的 QGraphicsPixmapItemQGraphicsTextItem 在双击时的行为不同: QGraphicsTextItem 将其双击事件发送给父级,而 QGraphicsPixmapItem 不, 我注释掉了 ItemIsFocusable 属性 :

mItem->setFlag ( QGraphicsItem::ItemIsMovable );
mItem->setFlag ( QGraphicsItem::ItemIsSelectable );
//mItem->setFlag ( QGraphicsItem::ItemIsFocusable);

因为即使 ItemIsFocusableQGraphicsItem 属性,它在不同 QGraphicsItem 继承的 类 中的行为也不相同, 因此,为了处理双击,我在 QGraphicsScene 上安装了一个事件过滤器,它在主小部件中包含 QGraphicsItems。

this->ui.graphicsViewMainScreen->scene ( )->installEventFilter ( this );

作为事件过滤器的实现:

bool MyMainWidget::eventFilter ( QObject *target , QEvent *event )
{
    if ( target == this->ui.graphicsViewMainScreen->scene ( ) )
    {
        if ( event->type ( ) == QEvent::GraphicsSceneMouseDoubleClick )
        {
            QGraphicsSceneMouseEvent *mouseEvent = static_cast<QGraphicsSceneMouseEvent *>( event );
        }
    }
    return false;
}

现在我可以检测到在主窗口小部件场景中双击 QGraphicsItem