我想将QTextDocument
多个QTextDocumentFragment
s 中的 a 放在一起,用 . 表示的水平规则分隔<HR>
。像这样的东西(作为 ASCII 模型):
foo
-------
bar
-------
baz
我这样做的尝试(使用insertText()
而不是insertFragment()
现在,以尝试使基本方案正常工作,但同样的事情发生在insertFragment()
)看起来像这样:
QTextEdit *textedit = ui->descriptionTextEdit;
QTextDocument *textdoc = textedit->document();
textedit->clear();
QTextCursor insertion(textdoc);
insertion.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor);
insertion.insertText("foo");
insertion.insertBlock();
insertion.insertHtml("<HR>");
insertion.insertBlock();
insertion.insertText("bar");
insertion.insertBlock();
insertion.insertHtml("<HR>");
insertion.insertBlock();
insertion.insertText("baz");
qDebug() << textdoc->toHtml();
这样做的结果真的很奇怪。这是一个屏幕截图:
如您所见,我请求了两个<HR>
标签,但我得到了五个水平规则!QTextDocument 的 HTML 也很奇怪(我添加了几个换行符以使其更具可读性):
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">
<html>
<head><meta name=\"qrichtext\" content=\"1\" />
<style type=\"text/css\">
p, li { white-space: pre-wrap; }
</style></head>
<body style=\" font-family:'.SF NS Text'; font-size:13pt; font-weight:400; font-style:normal;\">
<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">foo</p>
<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">bar</p>
<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">baz</p>
</body></html>
<HR>
HTML 中根本没有我的标签的迹象。使用稍微不同的策略——insertBlock()
只在<HR>
插入之前调用,或者只在它们之后调用,或者根本不调用——我得到了这个主题的变化;有时bar
并且baz
在 HTML 输出中不可见,但大量的<HR>
标签却是。例如,如果我将插入代码更改为:
insertion.insertText("foo");
//insertion.insertBlock();
insertion.insertHtml("<HR>");
insertion.insertBlock();
insertion.insertText("bar");
//insertion.insertBlock();
insertion.insertHtml("<HR>");
insertion.insertBlock();
insertion.insertText("baz");
然后我得到一个结果,在我的应用程序的可见渲染中有四个水平规则,并且有这个 HTML 输出:
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">
<html><head><meta name=\"qrichtext\" content=\"1\" />
<style type=\"text/css\">
p, li { white-space: pre-wrap; }
</style></head>
<body style=\" font-family:'.SF NS Text'; font-size:13pt; font-weight:400; font-style:normal;\">
<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">foo</p>
<hr />
<hr />
<hr />
<hr />
</body></html>
请注意bar
和baz
在 HTML 输出中不可见,尽管它们在应用程序中呈现可见。
但是,在我发现的代码中,我没有得到我想要的东西。看起来我正在QTextDocument
进入某种内部不一致或混乱的状态。那么:这样做的正确方法是什么?
这是 macOS 10.14.6 上的 Qt 5.9.8。