在QTextDocument中单击链接时生成自定义事件

问题描述 投票:2回答:1

当我们单击QTextEdit中添加的QTextDocument内的链接时,是否可以生成自定义事件。我目前能够使用QTextCursor类的insertHtml()函数创建Link,但是该链接不可单击。

如果您知道如何在单击QTextDocument中的链接时生成自定义事件,请分享。谢谢

python python-3.x pyqt pyqt5 qtextdocument
1个回答
3
投票

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_())
© www.soinside.com 2019 - 2024. All rights reserved.