PySide6 Tutorials (三)鼠标移动控件及其位置更新

问题描述

在graphicview中拖拽控件从A位置到B位置,但是从B位置再次拖拽控件的时候,控件依旧从A位置出发,与鼠标不处于同一位置。

解决方案

网上搜了一圈都是收费文章,什么时候开源精神都已经被xxxx用来中间商赚差价了嘛!别人收费我免费,一起进步才不累!

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)
知识点
  1. 控件位置的更新需要用到鼠标的位移
  2. 控件位置拖动之后,需要通过代码更新位置

本文为作者原创,转载需注明出处!!!

最近更新

  1. TCP协议是安全的吗?

    2023-12-20 15:44:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-20 15:44:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-20 15:44:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-20 15:44:02       18 阅读

热门阅读

  1. man用法

    2023-12-20 15:44:02       32 阅读
  2. 力扣题目学习笔记(OC + Swift)15. 三数之和

    2023-12-20 15:44:02       34 阅读
  3. LeetCode-28. 找到字符串中第一个匹配项的下标

    2023-12-20 15:44:02       34 阅读
  4. React中的useMemo钩子

    2023-12-20 15:44:02       39 阅读
  5. Vue Teleport和Vue的介绍

    2023-12-20 15:44:02       37 阅读
  6. 【算法】【动规】摆动序列

    2023-12-20 15:44:02       44 阅读
  7. excel技巧

    2023-12-20 15:44:02       39 阅读
  8. 【.Net 6.0--通用帮助类--总览】

    2023-12-20 15:44:02       47 阅读
  9. Spark报错:顶级Product编程

    2023-12-20 15:44:02       41 阅读
  10. Docker 如何删除所有没有名字的镜像

    2023-12-20 15:44:02       40 阅读