2016-01-19 52 views
0

我有多个QGraphicsItemsItemIsSelectable,ItemIsMovableItemSendsGeometryChanges标志。已禁用QGraphicsItem防止滚动的QGraphicsView

有时候我想禁用这些项目的选择和运动,我目前通过调用QGraphicsItem.setEnabled(False)这样做。然而,当光标位于的禁用QGraphicsItem顶部,滚轮已经不滚动视图。我试图通过谷歌寻找解决方案,但我还没有找到任何工作解决方案。

所以,我的问题是:有没有一种简单的方法*不*让禁用物品,如果将光标悬停在他们防止滚动?

如果没有,我可以只写一个自己的函数,禁止提到的标志,而不是对QGraphicsItem调用setEnabled(),但我仍然不知道为什么滚动不工作,如果我真的不能让禁用的项目忽略滚动事件。

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

我的设置:Windows 7中的Python 2.7.3和PyQt4的

+0

你也许能够适应这个问题的答案:http://stackoverflow.com/q/34476962/1994235 –

回答

1

void QGraphicsItem::setEnabled(bool enabled)

禁用的项目是可见的,但他们不接受
鼠标事件被丢弃

任何事件

这就是您的鼠标事件 - 滚轮 - 无法正常工作的原因。
为什么试图改变鼠标按钮的名称不会有所作为 - 该项目根本不:-)

如果要禁用QGraphicsItem的移动与选择照顾,最好的办法就是取消设置他们QGraphicsItem::ItemIsSelectableQGraphicsItem::ItemIsMovable标志。

这似乎真的简单......正如你可能已经注意到了。

的选择 - 作为链接的答案显示 - 是安装一个场景事件过滤器,有其他项目筛选禁用的项目活动。下面的问题有好消息:

Event filter on QGraphicsItem

+0

是的,你重置这些标志是什么,我决定做到底。 – user2746752