QCursor 的详细介绍

QCursor 是 PyQt5 中用于处理鼠标光标的核心类,属于 PyQt5.QtGui 模块。它允许开发者控制应用程序中的光标形状、位置和自定义光标样式。以下是 QCursor 的详细介绍:

1. ​基本功能

  • 设置光标形状:提供多种预定义光标(如箭头、手型、等待等)。
  • 获取/设置光标位置:全局(屏幕)或局部(窗口控件)光标位置。
  • 自定义光标:通过图片或像素图创建自定义光标。

2. ​常见用法

导入模块

python

from PyQt5.QtGui import QCursor
from PyQt5.QtCore import Qt
设置控件的光标形状

python

# 设置某个控件(如按钮)的光标为手型
button.setCursor(QCursor(Qt.PointingHandCursor))
设置全局光标形状

python

# 设置整个应用程序的光标为等待(沙漏)
QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
# 恢复默认光标
QApplication.restoreOverrideCursor()
获取光标位置

python

# 获取全局(屏幕)光标位置
global_pos = QCursor.pos()

# 获取相对于某个控件的局部位置
local_pos = widget.mapFromGlobal(QCursor.pos())
设置光标位置

python

# 将光标移动到屏幕坐标 (100, 100)
QCursor.setPos(100, 100)

3. ​预定义光标类型

QCursor 支持多种系统内置光标,通过 Qt.CursorShape 枚举值指定:

枚举值说明
Qt.ArrowCursor默认箭头
Qt.PointingHandCursor手型(链接或可点击元素)
Qt.WaitCursor等待(沙漏或旋转圆圈)
Qt.CrossCursor十字线(绘图工具)
Qt.SizeAllCursor移动(四向箭头)
Qt.IBeamCursor文本输入(I 型光标)
Qt.ForbiddenCursor禁止操作(带斜杠的圆圈)

完整列表参考 Qt文档。


4. ​自定义光标

可以通过图片或像素图创建自定义光标:

使用图片文件(.cur 或 .png)​

python

from PyQt5.QtGui import QPixmap

# 加载图片并创建光标
pixmap = QPixmap("custom_cursor.png")
cursor = QCursor(pixmap, hotX=0, hotY=0)  # hotX/Y 是光标热点位置(如箭头尖)
button.setCursor(cursor)
使用像素图(QBitmap)​

python

from PyQt5.QtGui import QBitmap, QCursor

# 创建黑白掩码(1位深度)
bitmap = QBitmap(32, 32)  # 大小通常为 32x32
bitmap.fill(Qt.color0)     # 透明部分
# ... 绘制自定义形状 ...
cursor = QCursor(bitmap, bitmap)  # 掩码和自身相同

5. ​注意事项

  1. 光标资源路径
    自定义光标时,图片路径需正确,否则会显示默认箭头。

  2. 跨平台兼容性

    • Windows 支持 .cur 和 .ico 格式。
    • Linux/macOS 可能需额外处理,建议测试多平台。
  3. 性能
    频繁切换光标可能影响用户体验,避免过度使用动画或复杂光标。

  4. 恢复默认光标
    使用 QApplication.restoreOverrideCursor() 或 widget.unsetCursor() 恢复。


6. ​示例代码

动态切换光标

python

from PyQt5.QtWidgets import QApplication, QPushButton
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QCursor

app = QApplication([])

button = QPushButton("Hover me!")
button.setCursor(QCursor(Qt.PointingHandCursor))  # 悬停时显示手型

# 点击时切换为等待光标
def on_click():
    QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
    # 模拟耗时操作
    import time
    time.sleep(2)
    QApplication.restoreOverrideCursor()

button.clicked.connect(on_click)
button.show()
app.exec_()
自定义光标图片

python

from PyQt5.QtWidgets import QLabel
from PyQt5.QtGui import QPixmap, QCursor

label = QLabel("Hover here for custom cursor")
pixmap = QPixmap("custom_cursor.png").scaled(32, 32)  # 缩放为合适大小
label.setCursor(QCursor(pixmap, hotX=5, hotY=5))  # 热点位置根据图片调整

7. ​常见问题

  • 光标不生效
    确保控件未禁用(setEnabled(True)),且未被父控件覆盖光标设置。

  • 自定义光标颜色异常
    使用 .cur 或 .png 时确保图片背景透明。

  • Linux 兼容性
    部分桌面环境(如 GNOME/KDE)可能限制自定义光标,需测试目标平台。


掌握 QCursor 可以显著提升 GUI 应用的交互体验!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值