使用 myQTextEdit.append()时,插入文本的样式如下(Qt 5.14文档):
“ 附加的新段落将具有与当前段落相同的字符格式和块格式,具体取决于光标的位置。”
但是我发现能够以中性样式附加文本很方便。
导致我的问题的原因是: 我有一个QTextEdit形式的日志窗口,在其中添加文本(通常是中性的,但某些元素可能是彩色的,等等)。由于它是出于日志目的,因此QTextEdit是只读的,并且文本元素始终添加在末尾( append())。只要用户从不单击文本,就可以了。单击QTextEdit的一部分时,光标位置将更改。由于我使用append()在结尾插入文本,即使光标在其他位置,该位置也不是问题。但是,如果用户单击具有非中性样式的内容,则后面附加的文本也将具有此样式,这是不希望的。
对我来说有趣的是,要么阻止光标以使用户无法篡改样式,要么在不将样式基于当前段落的基础上追加样式。
除了子类化QTextEdit之外,还有其他方法可以改变这种行为吗?
如前所述,我可以在执行任何append()之前检查光标位置(如果已经移动了光标,则将其设置在文档的末尾),但是如果存在的话,我希望使用更“全局”的解决方案。
答案 0 :(得分:1)
我试图在MCVE中复制OP所描述的内容:
// Qt header:
#include <QtWidgets>
// main application
int main(int argc, char **argv)
{
qDebug() << "Qt Version:" << QT_VERSION_STR;
QApplication app(argc, argv);
// setup GUI
QTextEdit qTextEdit;
qTextEdit.show();
// populate text editor
qTextEdit.append(QString::fromUtf8(
"<p>This is some text...</p>"
"<p style='color: red'>...followed by more red text...</p>"
"<p style='color: blue; font-weight: bold'>...followed by more fat blue text.</p>"));
// test QTextEdit::append() like described by OP:
qTextEdit.setTextCursor(QTextCursor(qTextEdit.document()->findBlockByNumber(1)));
qTextEdit.append("TEST. (Reproduce what OP described.)");
qTextEdit.append("<p>TEST. (A possible fix.)</p>");
// runtime loop
return app.exec();
}
输出:
因此,一种可能的解决方法是提供带有标记的文本。
如果只是纯文本,最简单的解决方案是将其包装在"<p>"
和"</p>"
中。
顺便说一句。如果只是纯文本,我建议您根据Supported HTML Subset进行一些其他调整,以使其适合HTML。 就是说,我会像我一样搜索并替换通常的XML元字符。在我对SO: qt plaintextedit change message color的回答中。