PyQt5 修改QtextEdit控件的光标形状

直接用QWidget.setCursor() 无法修改,原因可能是因为QtextEdit修改了底层。

网上有说通过viewport()实现,不过是Qt代码,看懂不能啊_(:з」∠)_

// 设置鼠标样式(直接设置不管用,需调用viewport())
viewport()->setCursor(Qt::ArrowCursor);
Qt QTextEdit 设置只读,设置不可选中,设置鼠标样式_0ices的博客-CSDN博客_qtextedit 只读

 好在Qt官方文档里有提到QGuiApplication.setOverrideCursor()方法:


但是QGuiApplication.setOverrideCursor()方法会将全局的鼠标样式修改,具体看它的官方文档说明,所以方案如下:
1、鼠标进入控件(enterEvent()),使用setOverrideCursor()修改全局鼠标样式
2、鼠标退出控件(leaveEvent()),使用 restoreOverrideCursor()恢复鼠标样式
class QmyTextEdit(QTextEdit):
    def enterEvent(self, event):
        """鼠标进入事件
        """
        QGuiApplication.setOverrideCursor(Qt.PointingHandCursor)  # 修改鼠标样式
        super().enterEvent(event)

    def leaveEvent(self, event):
        """鼠标离开事件
        """
        QGuiApplication.restoreOverrideCursor()  # 恢复鼠标样式
        super().leaveEvent(event)
大致就是这样。 

不知道是否还有更简便的方法……

=========更新=========

本来打算就这么着的,结果另一个功能不支持QGuiApplication.setOverrideCursor()的方法,于是又献祭了几根头发,终于在QtextEdit里找到了一句话:

默认情况下,QTextEdit 上鼠标光标的形状为 Qt::IBeamCursor。它可以通过视口QAbstractScrollArea.viewport()的游标属性进行更改。

官方文档里这样解释viewport()函数的:

QWidget *QAbstractScrollArea::viewport() const  # 返回视口小部件。

我发现QTextEdit是QAbstractScrollArea的继承类,于是试了下,终于找到了修改QtextEdit的方法:

QTextEdit.viewport().setCursor(Qt.PointingHandCursor)  # QTextEdit为要修改的文本框对象,Qt.PointingHandCursor为光标样式的枚举值

总算搞定了

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值