当我们单击QTextEdit中添加的QTextDocument内的链接时,是否可以生成自定义事件。我目前能够使用QTextCursor类的insertHtml()函数创建Link,但是该链接不可单击。
如果您知道如何在单击QTextDocument中的链接时生成自定义事件,请分享。谢谢
QTextDocument不是可视元素,而是存储格式化的信息,因此单击的概念与它无关,而是与小部件无关。
在这种情况下,我将使用QTextEdit作为示例,您必须重写mousePressEvent方法并使用anchorAt方法来知道是否存在anchor(url):
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class TextEdit(QtWidgets.QTextEdit):
clicked = QtCore.pyqtSignal(QtCore.QUrl)
def mousePressEvent(self, event):
anchor = self.anchorAt(event.pos())
if anchor:
self.clicked.emit(QtCore.QUrl(anchor))
super().mousePressEvent(event)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
w = TextEdit()
w.append('Welcome to <a href="https://stackoverflow.com" >StackOverflow</a>!!!')
def on_clicked(url):
QtGui.QDesktopServices.openUrl(url)
w.clicked.connect(on_clicked)
w.show()
sys.exit(app.exec_())
尽管相同的功能已经具有QTextBrowser:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
w = QtWidgets.QTextBrowser()
w.append('Welcome to <a href="https://stackoverflow.com" >StackOverflow</a>!!!')
def on_clicked(url):
QtGui.QDesktopServices.openUrl(url)
w.anchorClicked.connect(on_clicked)
w.show()
sys.exit(app.exec_())