gpt4 book ai didi

python - 平移和缩放所有 QWidget 子项

转载 作者:太空宇宙 更新时间:2023-11-03 18:00:59 24 4
gpt4 key购买 nike

我想要一个可以在其中平移和缩放的 QWidget。

场景:

  • 当用户使用鼠标中键向上/向下滚动时,所有子项都会从小部件的中心缩放。
  • 如果用户按住 Alt 并按下鼠标中键,则所有子项都会使用鼠标移动的距离进行平移。

这个想法是通过子类化另一个 QWidget 来创建一个新的 QWidget。所以我用 QGraphicsView 来做例子:

更新:

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)

这个类对于平移和缩放效果很好,但是当我像这样使用它时:

view = MyQGraphicsView()
scene = QGraphicsScene()
view.setScene(scene)
view.setSceneRect(0, 0, 1000, 1000)

button = QPushButton('Hello !')
button.clicked.connect(self.sayHello)
scene.addWidget(button)

我无法点击该按钮。我该如何解决它?

最佳答案

最后,我只是忘记在我的重写函数上添加一个 super 构造函数,例如:

super(MyQGraphicsView, self).mouseMoveEvent(event)

关于python - 平移和缩放所有 QWidget 子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27682450/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com