当我们单击 QTextDocument 中添加到 QTextEdit 中的链接时,有没有一种方法可以生成自定义事件。我目前能够使用 QTextCursor 类的 insertHtml() 函数创建链接,但该链接不可点击。
如果您知道如何在单击 QTextDocument 中的链接时生成自定义事件,请分享。谢谢
当我们单击 QTextDocument 中添加到 QTextEdit 中的链接时,有没有一种方法可以生成自定义事件。我目前能够使用 QTextCursor 类的 insertHtml() 函数创建链接,但该链接不可点击。
如果您知道如何在单击 QTextDocument 中的链接时生成自定义事件,请分享。谢谢
QTextDocument 不是可视元素,而是存储格式化的信息,因此单击的概念与它无关,而是与小部件有关。
在这种情况下,我将以 QTextEdit 为例,您必须重写 mousePressEvent 方法并使用 anchorAt 方法来知道是否有锚点(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_())