问题描述
在graphicview中拖拽控件从A位置到B位置 ,但是从B位置再次拖拽 控件的时候,控件依旧从A位置出发,与鼠标不处于同一位置。
解决方案
网上搜了一圈都是收费文章,什么时候开源精神都已经被xxxx用来中间商赚差价了嘛!别人收费我免费,一起进步才不累!
python
class RectItem(QtWidgets.QGraphicsRectItem):
def __init__(self, *args):
super().__init__(*args)
self.setFlag(QtWidgets.QGraphicsItem.ItemIsMovable)
self.drag_start_pos = None
def mousePressEvent(self, event):
if event.button() == QtCore.Qt.LeftButton:
self.drag_start_pos = event.pos() # 记录鼠标点击位置
super().mousePressEvent(event)
def mouseMoveEvent(self, event):
if event.buttons() == QtCore.Qt.LeftButton:
if self.drag_start_pos is not None:
offset = event.pos() - self.drag_start_pos # 计算鼠标拖动的偏移量
new_pos = self.pos() + offset # 计算新的控件位置
self.setPos(new_pos) # 更新控件位置
super().mouseMoveEvent(event)
def mouseReleaseEvent(self, event):
if event.button() == QtCore.Qt.LeftButton:
self.drag_start_pos = None
super().mouseReleaseEvent(event)
知识点
- 控件位置的更新需要用到鼠标的位移
- 控件位置拖动之后,需要通过代码更新位置
本文为作者原创,转载需注明出处!!!