2016-04-28 30 views
0

這個類是我當前的圖形視圖。其中,我出現在graphicsscene。此圖形視圖由縮放功能縮放(您可以在下面看到)。PyQT縮放由mouseMoveEvent()中斷,爲什麼?

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 

..那動作傳球,大幅整個變焦功能的變化。它不是放大鼠標光標的頂部,而是看起來好像沒有縮放錨點,而縮放目標則是跟隨某個完全其他的系統。

由於縮放功能對我的產品至關重要,因此我需要解決這個問題。任何幫助將不勝感激。

+0

任何幫助將不勝感激! – RasmusJ

+0

使用你的代碼我不能重複你的報告行爲,因爲它不是一個完整的例子。對我來說這似乎很好,儘管你可以在重寫方法的某個地方調用super()方法,只是爲了確保。 – Trilarion

回答

0

就叫超之前處理該事件:

def mouseMoveEvent(self, event): 
    super().mouseMoveEvent(event) 
    # your code goes here 

它確實爲我工作。如果重新實現的方法需要,請不要忘記自問。