当前位置: 首页 > article >正文

重写Qt中的Widget移动事件

如果您想在Qt中重写Widget的移动事件,可以通过以下步骤实现:

  1. 创建自定义Widget并继承QWdget类。
  2. 重写QWidget的mousePressEvent()mouseMoveEvent()mouseReleaseEvent()方法。
  3. mousePressEvent()方法中,记录鼠标点击时Widget的位置。
  4. mouseMoveEvent()方法中,计算Widget移动的距离,并更新Widget的位置。
  5. mouseReleaseEvent()方法中,释放鼠标并完成移动。

下面是一个示例代码,可以帮助您理解如何重写Widget的移动事件:

from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtCore import Qt, QPoint

class CustomWidget(QWidget):

    def __init__(self, parent=None):
        super().__init__(parent)
        self.__mousePressPos = None
        self.__mouseMovePos = None

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.__mousePressPos = event.globalPos()
            self.__mouseMovePos = event.globalPos()
        super().mousePressEvent(event)

    def mouseMoveEvent(self, event):
        if event.buttons() == Qt.LeftButton:
            globalPos = event.globalPos()
            moved = globalPos - self.__mouseMovePos
            newPos = self.pos() + moved
            self.move(newPos)
            self.__mouseMovePos = globalPos
        super().mouseMoveEvent(event)

    def mouseReleaseEvent(self, event):
        if self.__mousePressPos is not None:
            moved = event.globalPos() - self.__mousePressPos
            if moved.manhattanLength() > 3:
                event.ignore()
            self.__mousePressPos = None
        super().mouseReleaseEvent(event)

if __name__ == '__main__':
    app = QApplication([])
    widget = CustomWidget()
    widget.show()
    app.exec_()

在这个示例代码中,我们创建了一个名为CustomWidget的自定义Widget,并重写了其中的mousePressEvent()mouseMoveEvent()mouseReleaseEvent()方法。在mousePressEvent()方法中,我们记录了鼠标点击时Widget的位置;在mouseMoveEvent()方法中,我们计算了Widget移动的距离,并更新了Widget的位置;在mouseReleaseEvent()方法中,我们释放鼠标并完成了移动。

使用以上示例代码,您便可以成功地重写Qt中的Widget移动事件了。


http://www.kler.cn/a/15154.html

相关文章:

  • Qt的一个基本用户登录界面编写|| 从0搭建QT的信号与槽的应用案例 ||Qt样式表的应用
  • HarmonyOs鸿蒙开发实战(9)=>解析json数据,自动生成实体Bean插件-jsonFormat使用教程(铁粉福利)
  • 说说软件工程中的“协程”
  • CC工具箱使用指南:【CAD导出界址点Excel】
  • Python | Leetcode Python题解之第564题数组嵌套
  • 【Redis】使用redis实现登录校验功能
  • 大好河山集团董事长黄国林受邀出席2023中国好公司高峰论坛暨产学研合作峰会
  • 快速理解哈希(Hash)表的运作原理
  • C++语言亚马逊国际获取AMAZON商品详情 API接口(
  • 7.3 股票分析(project)
  • Java中的try-with-resources语句
  • ctr特征重要性建模:FiBiNetFiBiNet++模型
  • P2224 [HNOI2001]产品加工(进程DP)
  • Cell Reports:任栓成/高东/胡志安/唐玲团队合作揭示压力性失眠发生的神经机制
  • SpringBoot -02 SpringBoot整合Mybatis、Druid数据源、单元测试、JSP
  • 最近部门新的00后真是卷王,工作没1年,入职18K
  • AlgoC++第六课:BP反向传播算法
  • SSL证书的五大优势
  • nssctf web
  • TOMCAT NGINX 环境的搭建脚本
  • 【华为校招真题】分配资源ID 100% C++
  • Python中 re.findAll()、re.sub()、set()的使用
  • 轻量级服务器nginx:负载均衡
  • 郑哲:学习、应用初探与探索创新 | 提升之路系列(四)
  • 【Linux】项目自动化构建工具-make/Makefile
  • 【Git 入门教程】第三节、Git的分支和合并