禁用的 QGraphicsItem 防止滚动 QGraphicsView
Disabled QGraphicsItem prevents scrolling of QGraphicsView
我有多个 QGraphicsItems
,带有 ItemIsSelectable
、ItemIsMovable
和 ItemSendsGeometryChanges
标志。
有时我想禁用这些项目的选择和移动,我目前正在通过调用 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::ItemIsSelectable
和 QGraphicsItem::ItemIsMovable
标志。
这看起来确实更简单...正如您可能已经注意到的那样。
替代方案(如链接答案所示)是安装场景事件过滤器,让其他项目过滤禁用的项目事件。以下问题有很好的信息:
Event filter on QGraphicsItem
我有多个 QGraphicsItems
,带有 ItemIsSelectable
、ItemIsMovable
和 ItemSendsGeometryChanges
标志。
有时我想禁用这些项目的选择和移动,我目前正在通过调用 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::ItemIsSelectable
和 QGraphicsItem::ItemIsMovable
标志。
这看起来确实更简单...正如您可能已经注意到的那样。
替代方案(如链接答案所示)是安装场景事件过滤器,让其他项目过滤禁用的项目事件。以下问题有很好的信息:
Event filter on QGraphicsItem