0
このクラスは現在のgraphicsviewです。その中で、私は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
...と、そのアクションは、全体のズーム機能の変更劇的パス、です。マウスカーソルの上をズームする代わりに、ズームアンカーがないかのように見え、ズームターゲットはまったく別のシステムの一部に従います。
私の製品ではズーム機能が重要なので、これを解決する必要があります。どんな助けでも大歓迎です。
ご協力いただければ幸いです! – RasmusJ
コードを使用すると、完全な例ではないため、報告された動作を繰り返すことはできません。あなたがsuper()メソッドをオーバーライドされたメソッドのどこかで呼び出すことはできますが、確かに私にはうれしいようです。 – Trilarion