gpt4 book ai didi

python - 将 QmouseEvent 转换为 QGraphicsSceneMouseEvent 以进行拖动移动

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

我想移动 QGraphicsScene,而不是移动整个小部件(这会由于小部件移动超出限制而导致一些图形故障)。

这就是我尝试做的:

def mousePressEvent(self, event):
#super(SvgView, self).mousePressEvent(event)

self.svgItem.mousePressEvent(event)

self.x += event.pos().x()
self.y += event.pos().y()
event.accept()

(请注意,我没有以正确的方式更新 self.x 和 self.y,因为这是一个“拖动”运动,我应该用“delta”代替,但我不知道如何获得)

这不起作用,因为 svgItem 需要一个 QGraphicsSceneMouseEvent

我尝试在场景上执行此 mouseEvent,而不是在 QGraphicsView 上执行此操作,但它不会使项目拖动。

是否有办法在不进行此转换的情况下执行此操作?如果有必要,我该怎么做?

最佳答案

对我来说,SVG + Javascript 非常容易理解,用它我可以做任何我想做的事情。但我在使用 PyQt 桌面应用程序时遇到了困难。 Avaris 帮助我了解 Qt 中的事件传播。我写了几行来进行实验,但也许对你有帮助。不是最好的,但“eppur si muove”:

from PySide import QtGui, QtCore

class View(QtGui.QGraphicsView): # as separate class
def BlahBlah():
print dir()

class Scene_w_ellipse(QtGui.QGraphicsScene):
def __init__(self):
super(Scene_w_ellipse, self).__init__()
self.setSceneRect(0,0,300,200)
self.C = QtGui.QGraphicsEllipseItem(-4,-20,80,40)
self.C.setPos(100,70)
self.C.setFlags(QtGui.QGraphicsItem.ItemIsMovable)
#self.C.mousePressEvent(QtGui.QGraphicsSceneMouseEvent)
self.addItem(self.C)

def mousePressEvent(self, event):
print dir()

def mouseMoveEvent(self, event):
self.C.mouseMoveEvent(event)

def mouseReleaseEvent(self, event):
self.C.mouseReleaseEvent(event)

对于您的背景,不要子类化,将其构建为单独的类。

关于python - 将 QmouseEvent 转换为 QGraphicsSceneMouseEvent 以进行拖动移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14558105/

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