直接用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为光标样式的枚举值
总算搞定了