我已经根据Peter Goldsborough的this example组装了一个文本编辑器。文本框从html填充,但显示为富文本。
我已经制作好了,因此用户可以点击文本框中已有的超链接。但是,我不知道从哪里开始添加功能,以便用户可以在编辑时添加自己的,新的可点击超链接。我非常感谢那些知道的人的指示!
(我特意试图避免采用的方法here - 这个家伙似乎正在使用一个解析器来扫描整个文档以获得类似链接的结构并添加html标签。这似乎更难,更多容易出错,我想知道是否只有一种方法可以用html标签包围突出显示的文本。)
我尝试了@ kuba-ober的下面的建议,但是因为我正在使用Python的Qt的PyQt4绑定,我修改了它:
def setHyperlinkOnSelection(self, url):
cursor = self.text.textCursor()
if not cursor.hasSelection():
return False
format = QtGui.QTextCharFormat()
format.setAnchor(True)
format.setAnchorHref(url)
cursor.mergeBlockCharFormat(format)
return True
不幸的是,这不起作用,但我用它来调整Goldsborough的example中的一些格式化方法,以产生以下结果:
def setHyperlinkOnSelection(self, url):
# Grab the text's format
fmt = self.text.currentCharFormat()
# Set the format to an anchor with the specified url
fmt.setAnchor(True)
fmt.setAnchorHref(url)
# And set the next char format
self.text.setCurrentCharFormat(fmt)
这会产生一个链接(蓝色带下划线的文本,当转换为html时,使用" a href"标签)正确格式化,但它不可点击(用鼠标悬停在文本上没有&# 39; t改变到指针,点击不做任何事情...... ...
答案 0 :(得分:0)
QTextBrowser
对QTextDocument
进行操作。 html是QTextDocument
表示的数据结构的表示格式。
链接解决方案中的方法不必要地对超文本表示进行操作,而高级QTextDocument
结构更容易操作,因为它已经“解析”了逻辑结构 - 毕竟,{ {1}}是超文本AST的代表。
您需要使用文档的光标机制来操作选择并将其转换为超链接。即,QTextDocument
为具有锚点的格式:
mergeBlockCharFormat
请注意,仅提供链接并不会使其充当链接。以下外部链接可能存在危险,您需要明确启用ii。如果您需要在浏览器中打开链接,请设置:
bool setHyperlinkOnSelection(QTextBrowser * browser, const QString & url) {
auto doc = browser->document();
QTextCursor cur(doc);
if (!cur.hasSelection())
return false;
QTextCharFormat format;
format.setAnchor(true);
format.setAnchorHref(url);
cur.mergeBlockCharFormat(format);
return true;
}
即使browser->setOpenLinks(true);
为openLinks
(这是默认值),也会发出false
信号,您可以对其采取行动。
如果您需要在系统默认Web浏览器中打开外部链接,请设置:
anchorClicked
设置后,不会为这些链接发出browser->setOpenExternalLinks(true);
信号。
外部链接是指除anchorClicked
或file
以外的网址方案的链接。
答案 1 :(得分:0)
好的,我明白了 - 当qtextbrowser设置为只读模式时,链接不起作用。关于here的更多细节。如果有人知道如何克服Qt中这种明显的限制,我将不胜感激,但是现在我将通过在只读和可编辑模式之间快速切换来解决这个问题。