我有一个QGraphicsScene和许多可选项。但是当我单击鼠标右键时 - 取消选择所有对象。我想要显示菜单并编辑所选对象,但在鼠标右键单击时可以自动取消选择...
也许问题在于我已经包含了橡胶选择。最后选择对象是我拉动框架时左右键的方式,因此在按下右键的同时重置...
单击鼠标右键时如何突出显示对象?或者可能需要禁用右键的橡胶选择?
答案 0 :(得分:2)
Daniele Pantaleone回答给了我一个想法,我修改了mousePressEvent()
的功能,并立即得到了预期的效果
def mousePressEvent(self, event):
if event.button() == Qt.MidButton:
self.__prevMousePos = event.pos()
elif event.button() == Qt.RightButton: # <--- add this
print('right')
else:
super(MyView, self).mousePressEvent(event)
答案 1 :(得分:1)
一种可能的解决方案是使用mouseReleaseEvent
来显示上下文菜单,而不是contextMenuEvent
:
def mouseReleaseEvent(self, mouseEvent):
if mouseEvent.button() == Qt.RightButton:
# here you do not call super hence the selection won't be cleared
menu = QMenu()
menu.exec_(mouseEvent.screenPos())
else:
super().mouseReleaseEvent(mouseEvent)
我还没有能够测试它,但我想它应该可行。关键是默认情况下QGraphicsScene
清除了选择,因此在需要显示上下文菜单的情况下,您需要做的是防止在满足某些条件时发生清除。