Python setCursor()对QTextEdit小部件中的鼠标形状没有影响 1.问题解释
当鼠标悬停在Python setCursor()对QTextEdit小部件中的鼠标形状没有影响 1.问题解释,python,python-3.x,qt,pyqt,pyqt5,Python,Python 3.x,Qt,Pyqt,Pyqt5,当鼠标悬停在QTextEdit()小部件中的可点击文本上时,我想使鼠标形状从I-光束变为指针。由于以下问题,我知道如何实现这一目标: 不幸的是,更改光标形状的方法依赖于此全局函数: QApplication.setOverrideCursor(Qt.PointingHandCursor) 这是可行的,但当您将鼠标移到其他小部件上时,会产生意想不到的后果。更改鼠标形状的更简洁方法是使用此功能: self.setCursor(Qt.PointingHandCursor) self是感兴趣的QW
QTextEdit()
小部件中的可点击文本上时,我想使鼠标形状从I
-光束变为指针。由于以下问题,我知道如何实现这一目标:
不幸的是,更改光标形状的方法依赖于此全局函数:
QApplication.setOverrideCursor(Qt.PointingHandCursor)
这是可行的,但当您将鼠标移到其他小部件上时,会产生意想不到的后果。更改鼠标形状的更简洁方法是使用此功能:
self.setCursor(Qt.PointingHandCursor)
self
是感兴趣的QWidget()
。不幸的是,这对QTextEdit()
小部件没有影响
2.极简例子
考虑以下最简单的自包含示例代码:
导入系统
从PyQt5.Qt导入QDesktopServices、QUrl、QApplication、QColor、Qt
从PyQt5.QtWidgets导入QTextEdit
类MyWidget(QTextEdit):
定义初始化(自):
super()。\uuuu init\uuuuu()
self.setMouseTracking(True)
返回
def鼠标压力(自我,e):
超级鼠标压力事件(e)
self.anchor=self.anchorAt(e.pos())
如果self.anchor:
self.setCursor(Qt.PointingHandCursor)
#QApplication.setOverrideCursors(Qt.PointingHandCursor)
返回
def mouseReleaseEvent(自身,e):
super().mouseReleaseEvent(e)
如果self.anchor:
openUrl(QUrl(self.anchor))
self.setCursor(Qt.ArrowCursor)
#QApplication.setOverrideCursor(Qt.ArrowCursor)
self.anchor=None
返回
def mouseMoveEvent(自身,e)->无:
super().mouseMoveEvent(e)
self.anchor=self.anchorAt(e.pos())
如果self.anchor:
self.setCursor(Qt.PointingHandCursor)
#QApplication.setOverrideCursors(Qt.PointingHandCursor)
其他:
self.setCursor(Qt.ArrowCursor)
#QApplication.setOverrideCursor(Qt.ArrowCursor)
返回
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
app=QApplication(sys.argv)
editor=MyWidget()
cursor=editor.textCursor()
fmt=cursor.charFormat()
fmt.setForeground(QColor('blue'))
地址http://example.com'
fmt.setAnchor(真)
fmt.setAnchorHref(地址)
fmt.setToolTip(地址)
插入文本(“这是一个链接”,fmt)
编者:show()
app.exec()
请修改一下这个示例代码。你会注意到:
- 激活行
,它就会工作QApplication.setOverrideCursors(Qt.PointingHandCursor)
- 使用清理器
(让self.setCursor(Qt.PointingHandCursor)
被注释掉),什么都不会发生setOverrideCursor()
self.setCursor(Qt.PointingHandCursor)
在QTextEdit()小部件上正常工作吗?或者您知道实现相同目标的另一种方法吗?不使用setOverrideCursor()
函数?关键是使用:
self.viewport().setCursor(Qt.PointingHandCursor)
而不是:
self.setCursor(Qt.PointingHandCursor)
我的灵感来自: