[英]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.