我想使用QTextEdit
(在只读模式下)显示可点击的超链接,我曾经这样做
QTextEdit *textEdit = new QTextEdit;
QTextCursor cursor(textEdit->document());
textEdit->setTextCursor(cursor);
cursor->insertHtml("<a href=\"www.google.com\" >Google</a>");
textEdit->show();
此代码会将Google显示为超链接,但无法点击 如果我用了
QTextEdit *textEdit = new QTextEdit;
QTextCursor cursor(textEdit->document());
textEdit->setTextCursor(cursor);
QTextCharFormat linkFormat = cursor.charFormat();
linkFormat.setAnchor(true);
linkFormat.setAnchorHref("http://www.google.com");
linkFormat.setAnchorName("Google");
cursor.insertText("Google", linkFormat);
然后什么也没发生。 “Google”只是普通文字。
请帮我插入可点击的超链接QTextEdit
。
答案 0 :(得分:6)
使用QTextBrowser
更简单(如另一个答案所示)。但是,如果由于某种原因您想使用QTextEdit
,请尝试使用setTextInteractionFlags()
更改文本交互标记。
我认为你必须启用Qt::LinksAccessibleByMouse
标志。
答案 1 :(得分:3)
要在QTextEdit中具有可单击的超链接,可以使用
QTextCharFormat::setAnchorHref
设置某些文本的链接
QWidget::mousePressEvent
捕获鼠标按下事件
这是最小的PyQt示例,
import sys
from PyQt5.Qt import QDesktopServices, QUrl, QApplication, QColor, Qt
from PyQt5.QtWidgets import QTextEdit
class MyWidget(QTextEdit):
def mousePressEvent(self, e):
self.anchor = self.anchorAt(e.pos())
if self.anchor:
QApplication.setOverrideCursor(Qt.PointingHandCursor)
def mouseReleaseEvent(self, e):
if self.anchor:
QDesktopServices.openUrl(QUrl(self.anchor))
QApplication.setOverrideCursor(Qt.ArrowCursor)
self.anchor = None
app = QApplication(sys.argv)
editor = MyWidget()
cursor = editor.textCursor()
fmt = cursor.charFormat()
fmt.setForeground(QColor('blue'))
address = 'http://example.com'
fmt.setAnchor(True)
fmt.setAnchorHref(address)
fmt.setToolTip(address)
cursor.insertText("Hello world again", fmt)
editor.show()
app.exec_()
答案 2 :(得分:2)
如果它只读文本,您可以使用QTextBrowser而不是QTextEdit。
答案 3 :(得分:0)
据我尝试,使用QTextEdit
+ Qt::LinksAccessibleByMouse
时,我可以单击链接,但不执行任何操作(即,链接未打开)。唯一可能的操作是右键单击链接,然后选择Copy Link Location
。
如前所述,一种选择是使用QTextBrowser
。在这种情况下,您还必须设置QTextBrowser::openExternalLinks
属性,以便使用默认浏览器打开链接,否则它将在文本浏览器小部件中打开。
给定一个只读文本,另一种选择是将QLabel
与rich format一起使用,并向QLabel::linkActivated
使用open the URL信号
label->setTextFormat(Qt::RichText);
QObject::connect(label, &QLabel::linkActivated, [](const QString & link) {
QDesktopServices::openUrl(link);
});