0
팬을 확대/축소 할 수있는 QWidget을 갖고 싶습니다.팬 & 줌 전체 QWidget 하위
시나리오 :
- 사용자가 스크롤 업/아래 자신의 마우스 가운데 버튼을 사용하여, 모든 아이들이 위젯의 중심에서 조정됩니다.
- 사용자가 Alt 키를 누른 채로 마우스 가운데 버튼을 누르면 모든 자식이 마우스로 만들어진 거리를 사용하여 변환됩니다.
다른 아이디어를 서브 클래 싱하여 새로운 QWidget을 만드는 것이 아이디어입니다. 그래서 예를 QGraphicsView와 함께 만든 :
UPDATE :
class MyQGraphicsView(QGraphicsView):
def __init__(self):
QGraphicsView.__init__(self)
self.setFocusPolicy(Qt.WheelFocus)
self.setRenderHints(QPainter.Antialiasing)
self.altPressed = False
self.middlePressed = False
self.rightPressed = False
def wheelEvent(self, event):
self.newScale(event.delta(), 1.15)
def keyPressEvent(self, event):
if event.key() == Qt.Key_Alt:
self.altPressed = True
QApplication.setOverrideCursor(Qt.OpenHandCursor)
def keyReleaseEvent(self, event):
if event.key() == Qt.Key_Alt:
self.altPressed = False
QApplication.setOverrideCursor(Qt.ArrowCursor)
def mousePressEvent(self, event):
self._dragPos = event.pos()
if event.button() == Qt.MidButton:
self.middlePressed = True
if event.button() == Qt.RightButton:
self.rightPressed = True
def mouseReleaseEvent(self, event):
if event.button() == Qt.MidButton:
self.middlePressed = False
if event.button() == Qt.RightButton:
self.rightPressed = False
def mouseMoveEvent(self, event):
if self.altPressed:
newPos = event.pos()
if self.middlePressed:
diff = newPos - self._dragPos
self._dragPos = newPos
QApplication.setOverrideCursor(Qt.ClosedHandCursor)
self.horizontalScrollBar().setValue(self.horizontalScrollBar().value() - diff.x())
self.verticalScrollBar().setValue(self.verticalScrollBar().value() - diff.y())
event.accept()
if self.rightPressed:
diff = newPos - self._dragPos
self._dragPos = newPos
QApplication.setOverrideCursor(Qt.SizeAllCursor)
self.newScale(diff.x(), 1.01)
def newScale(self, operator, factor):
if operator > 0:
self.scale(factor, factor)
if operator < 0:
self.scale(1.0/factor, 1.0/factor)
I는 다음과 같이 사용할 때이 클래스는 패닝 및 줌,하지만 잘 동작
:
view = MyQGraphicsView()
scene = QGraphicsScene()
view.setScene(scene)
view.setSceneRect(0, 0, 1000, 1000)
button = QPushButton('Hello !')
button.clicked.connect(self.sayHello)
scene.addWidget(button)
I 버튼을 클릭 할 수 없습니다. 어떻게 해결할 수 있습니까?
도 볼 http://stackoverflow.com/questions/19113532/qgraphicsview-zooming-in-and-out -under-mouse-position-using-mouse-wheel – Trilarion