PyQT Zooming被mouseMoveEvent()中断,为什么?

时间:2016-04-28 12:10:18

标签: python pyqt pyqt4 zoom pyside

这个类是我当前的图形视图。在其中,我出现在graphicsscene。此图形视图由缩放功能缩放(您可以在下面看到)。

from PySide import QtCore, QtGui
ZOOM_FACTOR = 2
MAX_ALLOWED_ZOOM = 4

class MapGraphicsView(QtGui.QGraphicsView):
    def __init__(self, parent):
        QtGui.QGraphicsView.__init__(self, parent)
        self.resize(parent.size().width(), parent.size().height())
        self.setAlignment(33)
        self.setTransformationAnchor(QtGui.QGraphicsView.AnchorUnderMouse)
        self.setResizeAnchor(QtGui.QGraphicsView.AnchorUnderMouse)
        self.setFrameShape(QtGui.QFrame.NoFrame)
        self.max_allowed_zoom = MAX_ALLOWED_ZOOM

    # Signal variables used to notify listeners. Listeners are connected in actions.py
    pressed = QtCore.Signal(QtCore.QEvent)
    released = QtCore.Signal(QtCore.QEvent)
    moved = QtCore.Signal(QtCore.QEvent)

    # Notify listeners when window is clicked
    def mousePressEvent(self, event):
        self.pressed.emit(event)

    def mouseReleaseEvent(self, event):
        self.released.emit(event)

    def mouseMoveEvent(self, event):
        #self.moved.emit(event)
        pass

    def zoom_in(self):
        self.scale(ZOOM_FACTOR, ZOOM_FACTOR)

    def zoom_out(self):
        self.scale(1/ZOOM_FACTOR, 1/ZOOM_FACTOR)

真的,一切都很美妙。好吧,如果我删除了mouseMoveEvent,它可以在下面的代码中看到。如果我删除了该事件,一切都完全符合预期:缩放是完美的,它位于光标顶部的正中。

如果我将mouseMoveEvent留在其中,即使它只执行一个动作..

def mouseMoveEvent(self, event):
    #self.moved.emit(event)
    pass

..并且该动作通过,整个缩放功能发生了巨大变化。它不是放在鼠标光标的顶部,而是看起来好像没有缩放锚点,而缩放目标则取代了一些完全不同的系统。

由于缩放功能在我的产品中至关重要,我需要解决这个问题。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

在处理事件之前先调用super:

<div value="GO" id="go-div" class="bubble">
   <input type="submit" value="GO" id="go-button" style="    position: absolute;
      width: 100%;
      height: 100%;
      top: 0;
      left: 0;" data-target="#search-results-page">
</div>
它确实对我有用。如果重新实现的方法需要它,请不要忘记自己。