插入 QTextEdit 的 HTML 不符合样式表

Posted

技术标签:

【中文标题】插入 QTextEdit 的 HTML 不符合样式表【英文标题】:HTML inserted into QTextEdit does not conform to style sheet 【发布时间】:2014-10-06 19:36:35 【问题描述】:

我有一个停靠的 QTextEdit,我用它来模拟 QT c++ gui 中的调试终端,并将其设置为带有白色文本的黑色背景。

我正在尝试使用它来打印来自QXmlSchemaValidator 的错误消息,但是来自模式验证器的消息是 html 格式的,并且每当我将它们插入QTextEdit 时,它都会恢复为默认字体,并且我最终得到黑色背景上的黑色文本。

实际的消息是这样的:

    <html xmlns='http://www.w3.org/1999/xhtml/'>
    <body>
        <p>Content of element 
            <span class='XQuery-keyword'>minValue</span> does not match its type definition: <span class='XQuery-data'>fu</span> is not valid according to <span class='XQuery-type'>xs:decimal</span>..
        </p>
</body>
</html>

使用setAcceptRichText(false)并不能解决问题,如果我使用insertPlainText()lineEdit添加文本,它会删除所有换行符并在错误消息中留下html标签,这是不可接受的。

有什么方法可以显示 HTML 富文本,但又不会影响样式表字体?

【问题讨论】:

在您的消息中添加一些 html 代码以使您的文本变白(字体颜色,basefont 标记在这种情况下最好,但我不确定 Qt 是否支持它)或者这不是一个好的解决方案你呢? 我实际上并没有编写 html 消息,它是 QAbstractMessageHandler 类的输出。我真的不想解析html来插入标签,除非我必须这样做。 好的,然后尝试下一件事:(我不测试它):在你设置你的 html 调用后 selectAll();并在此调用 setTextColor(Qt::White);有用吗? 【参考方案1】:

我在我的电脑上测试过。它完美地工作。使用这个:

edit->setHtml(htmlDescription);
edit->selectAll();
edit->setTextColor(Qt::green);

//Ok, but clear selection
QTextCursor cur = edit->textCursor();
cur.clearSelection();
edit->setTextCursor(cur);

【讨论】:

唯一的问题是必须从样式表中设置颜色/背景,而不是通过编程设置,所以在我的情况下它不起作用,但这是一个绝妙的技巧。【参考方案2】:

这有点杂乱无章,但我采用的解决方法是在将其添加到文本编辑之前从架构验证器消息中删除 HTML 标记。

QString errorMsg = msg.statusMessage().remove(QRegExp("<[^>]*>"));
textEdit->setText(errorMsg);

【讨论】:

以上是关于插入 QTextEdit 的 HTML 不符合样式表的主要内容,如果未能解决你的问题,请参考以下文章

QTextEdit插入不一致的HTML(重复/一致地执行相同的操作时)

QTextEdit更改单个段落/块的字体

QTextEdit HTML 子集中不需要的填充 <img>

QTextEdit 插入 QTextTable 的一些问题

QTextEdit 插入文本

如何在 QTextEdit 中插入图像?