我正在使用地图编辑器,其中使用QGraphicsView
显示QGraphicsObject
(地图)。我已经实现了this post中的图像缩放功能,并且尝试使用其平移实现,并发现它可以工作。但是,我希望能够在不切换的情况下进行平移,只需按住鼠标中键并从那里拖动即可。
我已经编写了这段代码来在两种模式(正常和拖动)之间切换,然后在mouse(Press/Release)Events
上调用它。
(在QGraphicsView中)
def toggleDragMode(self):
if self.dragMode() == QGraphicsView.ScrollHandDrag:
self.setDragMode(QGraphicsView.NoDrag)
self.pointerMode = PointerMode.Normal
else:
self.setDragMode(QGraphicsView.ScrollHandDrag)
self.pointerMode = PointerMode.Drag
def mousePressEvent(self, event):
if event.buttons() & Qt.MiddleButton:
self.toggleDragMode()
...
super().mousePressEvent(event)
def mouseReleaseEvent(self, event):
if self.dragMode() == QGraphicsView.ScrollHandDrag:
self.setDragMode(QGraphicsView.NoDrag)
self.pointerMode = PointerMode.Normal
super().mouseReleaseEvent(event)
(旁注:使用mouseReleaseEvent
时,我发现无法使用event.buttons() & Qt.MiddleButton
来检查中间按钮是否已释放,因此在这种情况下,我总是检查并释放。)
但是,每当我尝试单击鼠标中键并拖动时,都不会发生平移。但是,我已经确认,只要我使用鼠标左键作为绑定(即if event.buttons() & Qt.LeftButton: toggleDrag()
),此方法就可以正常工作。 QGraphicsView.mouseMoveEvent()
中必须有一些代码可以检查是否按住了左键并且光标处于DragMode。有没有办法在更深层次上更改键绑定?
编辑:我刚刚找到this link,并通过这样做(在QGraphicsView
中进行了尝试)
def __init__(*args, **kwargs):
...
self.STOP_GLOBAL_SCROLLING = 1
但无济于事。不过,这是一个有趣的线索。