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

PySide(PyQT)的mouseMoveEvent()和hoverMoveEvent()的区别

        在 PySide中,mouseMoveEvent 和 hoverMoveEvent 都是用于处理鼠标移动相关操作的事件,但它们之间存在明显的区别:

  • 事件触发条件

        • mouseMoveEvent:
        当鼠标在对应的图形项(如 QGraphicsPixmapItem)上移动,并且至少有一个鼠标按钮被按下时,mouseMoveEvent 会被触发。简单来说,它主要处理鼠标拖动操作。需要注意的是,要使图形项能够接收拖动事件,必须setFlag(QGraphicsItem.ItemIsSelectable, True),使其可以被选择。

        • hoverMoveEvent:
        当鼠标在对应的图形项上移动,且没有任何鼠标按钮被按下时,hoverMoveEvent 会被触发,也就是单纯的鼠标悬停移动。需要注意的是,要使图形项能够接收悬停事件,必须调用 setAcceptHoverEvents(True) 方法来启用悬停事件的接收。  

  • 事件对象

        • mouseMoveEvent:
        该事件接收的是 QMouseEvent 类型的事件对象。QMouseEvent 提供了丰富的信息和方法,例如可以使用 buttons() 方法来检查哪些鼠标按钮被按下,使用 pos() 方法获取鼠标相对于图形项的位置,使用 scenePos() 方法获取鼠标在场景中的位置等。

        • hoverMoveEvent:
        该事件接收的是 QGraphicsSceneHoverEvent 类型的事件对象。QGraphicsSceneHoverEvent 主要关注鼠标悬停相关的信息,它没有 buttons() 方法,因为悬停时鼠标按钮是未按下状态。不过可以使用 pos() 获取鼠标相对于图形项的位置,使用 scenePos() 获取鼠标在场景中的位置。  

  • 用途场景

        • mouseMoveEvent:
        常用于实现拖动效果,比如拖动图形项在场景中移动、调整图形项的大小等操作。在一些绘图应用中,用户按住鼠标左键拖动可以绘制线条、矩形框或者移动已经绘制好的图形。

        • hoverMoveEvent:
        通常用于实现鼠标悬停提示信息、高亮显示等效果。例如,当鼠标悬停在地图上的某个区域时,显示该区域的详细信息;或者当鼠标悬停在某个图形项上时,改变图形项的颜色以突出显示。

  • 用法示例

import sys
from PySide6.QtWidgets import QApplication, QGraphicsView, QGraphicsScene, QGraphicsPixmapItem, QGraphicsItem
from PySide6.QtGui import QPixmap
from PySide6.QtCore import Qt


class CustomPixmapItem(QGraphicsPixmapItem):
    def __init__(self, pixmap):
        super().__init__(pixmap)
        # 启用悬停事件
        self.setAcceptHoverEvents(True)
        # 启用选择事件
        self.setFlag(QGraphicsItem.ItemIsSelectable, True)

    def hoverMoveEvent(self, event):
        print("鼠标悬停移动,位置:", event.pos())
        super().hoverMoveEvent(event)

    def mouseMoveEvent(self, event):
        if event.buttons() & Qt.LeftButton:
            print("鼠标左键按下并移动,位置:", event.pos())
        super().mouseMoveEvent(event)


if __name__ == "__main__":
    app = QApplication(sys.argv)

    scene = QGraphicsScene()

    pixmap = QPixmap("example.jpg")
    if pixmap.isNull():
        print("无法加载图像")
        sys.exit(1)

    item = CustomPixmapItem(pixmap)
    scene.addItem(item)

    view = QGraphicsView(scene)
    view.show()

    sys.exit(app.exec())


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

相关文章:

  • 数据可视化新高度:用seaborn.heatmap为数据加热
  • Spring Security 新版本配置
  • 23.Harmonyos Next仿uv-ui 组件NumberBox 步进器组件基础用法
  • Vue3 + Spring Boot集成JWT认证
  • 【实战ES】实战 Elasticsearch:快速上手与深度实践-7.2.2自动扩缩容策略(基于HPA)
  • 【数据结构】1数据结构基本概念 【作业1数据结构综述】
  • 力扣hot100_普通数组
  • 【odoo17】odoo前端视图的结构分析及新增视图类型的实现
  • C++竞赛级输入输出优化实战
  • 通过Golang的container/list实现LRU缓存算法
  • 大数据任务调度:DolphinScheduler、Airflow 实战(调度策略、任务依赖)
  • Python基于深度学习的电影评论情感分析可视化系统(全新升级版)【附源码、参考文档】
  • 【每日学点HarmonyOS Next知识】拖拽调整列表顺序、tab回弹、自定义弹窗this、状态变量修饰枚举
  • 工作中,当遇到要把http请求变成https时 怎么处理
  • spring 的model repository service controller的功能
  • Yashan DB 文件管理
  • 《深度剖析架构蒸馏与逻辑蒸馏:探寻知识迁移的差异化路径》
  • 【音视频】ffmpeg命令提取像素格式
  • 20250212:linux系统DNS解析卡顿5秒的bug
  • 在 Spring Boot 2.7.x 中引入 Kafka-0.9 的实践