禁用的 QGraphicsItem 防止滚动 QGraphicsView

Disabled QGraphicsItem prevents scrolling of QGraphicsView

我有多个 QGraphicsItems,带有 ItemIsSelectableItemIsMovableItemSendsGeometryChanges 标志。

有时我想禁用这些项目的选择和移动,我目前正在通过调用 QGraphicsItem.setEnabled(False) 来实现。但是,当光标位于禁用的 QGraphicsItem 上方时,滚轮不再滚动视图。我试图通过 Google 找到解决方案,但我还没有找到任何可行的解决方案。

所以,我的问题是:有没有简单的方法*不*让禁用的项目在光标悬停在它们上方时阻止滚动?

如果没有,我可以编写一个自己的函数来禁用上述标志,而不是在 QGraphicsItem 上调用 setEnabled(),但我仍然想知道为什么滚动不起作用,并且如果我真的不能让禁用的项目忽略滚动事件。

我已经尝试过的一件事是通过 setAcceptedMouseButtons() 调用禁用 Qt.MiddleButton,但这似乎没有任何改变。

我的设置:Windows7、Python2.7.3 和 PyQt4

void QGraphicsItem::setEnabled(bool enabled)

Disabled items are visible, but they do not receive any events
Mouse events are discarded

这就是为什么您的鼠标事件 - 滚轮 - 不起作用的原因。
为什么尝试更改鼠标按钮的名称并没有什么不同 - 项目根本不关心:-)

如果您想禁用 QGraphicsItem 的移动和选择,最好的方法是取消设置它们的 QGraphicsItem::ItemIsSelectableQGraphicsItem::ItemIsMovable 标志。

这看起来确实更简单...正如您可能已经注意到的那样。

替代方案(如链接答案所示)是安装场景事件过滤器,让其他项目过滤禁用的项目事件。以下问题有很好的信息:

Event filter on QGraphicsItem