繁体   English   中英

将鼠标事件从QGraphicsItem传递到QGraphicsScene

[英]Pass mouse events from QGraphicsItem to QGraphicsScene

我有源自场景对象QGraphicsScene它和自定义项目,源自QGraphicsItem 我希望该项目对于鼠标事件是“透明的”,因此单击该项目区域将调用QGraphicsScene::mousePressEvent() ;

从文档中:

“ ...要禁用某项的鼠标事件(即,使其对鼠标事件透明),请调用setAcceptedMouseButtons(0)。”

但是如果我单击项目区域,场景仍然不会收到mouce事件。

MyItem::MyItem(QGraphicsItem * parent) :
    QGraphicsItem(parent)
{
    setAcceptedMouseButtons(Qt::NoButton);
}

QRectF MyItem::boundingRect() const
{
    return QRectF(0,0,100,100);
}

void MyItem::paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget)
{
    painter->fillRect(boundingRect(),QColor(0,0,160,10));
}

那么如何忽略该项目的鼠标事件?

将来有可能需要处理该项目的鼠标事件,因此正确的决定是实现QGraphicsItem :: mousePressEvent()并以某种方式将事件传递给场景。

你搞砸了evrything。 QGraphicsScene始终处理所有鼠标事件! 负责将这些事件传递给其子级 (场景中的QGraphicsItem )。 因此,场景接收鼠标事件,然后将事件传递到场景中的各个项目。

因此,如果item不接受鼠标事件,这并不意味着场景将再次处理鼠标事件。

子类化场景时,看起来好像弄乱了某些东西。

底线您的问题是错误的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM