动态显示/隐藏QTextEdit的一部分

时间:2016-04-14 09:26:29

标签: python qt pyqt

pyqt4中,我使用QTextEdit显示一些日志条目。日志输出是HTML,如下所示:

<div class="error">Error time and message</div>
<div class="warning">Warning time and message</div>
Some unclassified test always visible.

我希望能够动态更改每个日志级别的可见性,由具有指定类的div标识。即如何在不手动修改文档内容的情况下使所有带有警告类的div消失?

2 个答案:

答案 0 :(得分:1)

QTextDocument内部使用的QTextEdit包含QTextBlock个对象,这些对象具有setVisible()方法。尝试将<div></div>部分放入单独的文本块中(如果它们已经不存在;我记得每个<p></p>已经分配了自己的块),请通过QTextDocument::findBlock()找到它们或类似的方法并切换可见性。

要更改块的可见性,您可能需要解析传入的内容一次,使用QTextBlock::setUserData()构建文档,为每个块设置类的提示,或者存储块的集合索引取决于类。然后将文档设置为编辑窗口小部件的内容,并循环浏览所有块以设置视图模式更改时的可见性。

答案 1 :(得分:0)

尝试QTextEdit是否接受类定义:

.warning {
    text-color: transparent;
    text-size: 0;
}

或类似。

您可以将warning类创建为不可见且非常小甚至零大小!或者将div的高度设置为0!?

您可能需要根据需要修改此类定义,并在测试前添加并在QTextEdit中重置。

不知道这是否真的有效,但这是我能想到的唯一方法。