我有多个QGraphicsItems
,其中包含ItemIsSelectable
,ItemIsMovable
和ItemSendsGeometryChanges
个标记。
有时我想禁用这些项目的选择和移动,我现在通过调用QGraphicsItem.setEnabled(False)
来执行此操作。但是,当光标位于禁用的QGraphicsItem
之上时,滚轮不再滚动视图。我试图通过谷歌找到解决方案,但我还没有找到任何可行的解决方案。
所以,我的问题是:是否有一种简单的方法可以*不*如果光标悬停在它们上方,禁用项目会阻止滚动?
如果没有,我可以编写一个自己的函数来禁用所提到的标志,而不是在setEnabled()
上调用QGraphicsItem
,但我仍然想知道为什么滚动不起作用,如果我真的不能让禁用的项目忽略滚动事件。
我已经尝试过的一件事就是通过Qt.MiddleButton
电话停用setAcceptedMouseButtons()
,但这似乎无法改变任何内容。
我的设置:Windows 7,Python 2.7.3和PyQt4
答案 0 :(得分:1)
void QGraphicsItem::setEnabled(bool enabled)
残疾人物品可见,但他们没有收到任何事件 鼠标事件被丢弃
这就是您的鼠标事件 - 滚轮 - 无法正常工作的原因 为什么尝试更改鼠标按钮的名称并没有什么区别 - 项目根本不关心: - )
如果您想停用QGraphicsItem
的移动和选择,最好的方法是取消设置QGraphicsItem::ItemIsSelectable
和QGraphicsItem::ItemIsMovable
标记。
这看起来真的很简单......你可能已经注意到了。
备选方案 - 如链接的答案所示 - 是安装场景事件过滤器,让其他项过滤禁用的项事件。以下问题有很好的信息: