Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 动态显示/隐藏QTextEdit的一部分_Python_Qt_Pyqt - Fatal编程技术网

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

Python 动态显示/隐藏QTextEdit的一部分,python,qt,pyqt,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. 错误时间和消息 警告时间和信息 一些未分类的测试总是可见的。 我希望能够动态更改

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消失?

尝试
QTextEdit
是否接受以下类定义:

.warning {
    text-color: transparent;
    text-size: 0;
}
或类似的

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

您可能需要根据需要修改此类定义,并在测试前加上前缀,然后在
QTextEdit
中重置它


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

一个
QTextDocument
内部使用的
QTextEdit
包含
QTextBlock
对象,它们有一个
setVisible()
方法。尝试将
部分放入单独的文本块中(如果它们还没有;我记得每个

已经分配了自己的块),通过
QTextDocument::findBlock()
或类似方法查找它们,并切换可见性


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

但是,您如何识别块的类别?这些块包含文本,而不是html。@是否需要?如果文本具有固定格式(如OP示例),则可以使用块索引;不需要提取类。或者,您可以在构建文档时使用
QTextBlock::setUserData()
。当然,这不是一个HTML-ish解决方案,而是一个Qt-ish解决方案,但我怀疑使用HTML/CSS可以解决这个问题。错误日志输出不太可能有固定的顺序,但如果有,您可以使用索引。但可能OP甚至无法控制输出(比如说,因为它来自外部源)。这可能解释了对修改文档内容的限制。