2016-04-14 5 views
1

В pyqt4 Я использую QTextEdit для отображения некоторых записей журнала. Выход журнала HTML как это:Динамически показать/скрыть часть QTextEdit

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

Я хочу, чтобы иметь возможность динамически изменять видимость каждого уровня журнала, идентифицированный в DIV с указанным классом. То есть как я могу сделать все divs с классом предупреждение исчезнуть без ручной модификации содержимого документа?

ответ

0

Попробуйте принимает ли QTextEdit определения классов, как:

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

или аналогичный.

Возможно, вы сможете создать класс warning как невидимый и очень маленький или даже нулевой размер!? Или установить высоту div на 0!?

Возможно, вам потребуется изменить определение этого класса при необходимости и приступить к тестированию и сбросить его в QTextEdit.

Не знаю, работает ли это на самом деле, но это единственный способ, о котором я могу думать.

0

A QTextDocument как внутренне используемый QTextEdit содержит QTextBlock объектов, имеющих setVisible() метод. Попробуйте поместить разделы <div></div> в отдельные текстовые блоки (если они еще не были, я могу помнить, что каждому <p></p> уже был присвоен свой собственный блок), найдите их по QTextDocument::findBlock() или аналогичным методам и переключите видимость.

Чтобы изменить видимость блока, вам, вероятно, нужно разобрать входящий контент один раз, создать документ с использованием QTextBlock::setUserData(), чтобы установить подсказку для класса для каждого блока или сохранить наборы индексов блоков в зависимости от класса. Затем вы устанавливаете документ как содержимое виджета редактирования и выполняете цикл по всем блокам, чтобы установить видимость при изменении режима просмотра.

+0

Как бы вы определили * класс * блоков, хотя? Блоки содержат текст, а не html. – ekhumoro

+0

@ekhumoro Вам нужно? Если текст имеет фиксированный формат в качестве примера OP, вы можете использовать индекс блока; нет необходимости извлекать класс. В качестве альтернативы вы можете использовать 'QTextBlock :: setUserData()' при создании документа. Конечно, это не решение HTML-ish, а Qt-ish, но я сомневаюсь, что это можно решить с помощью HTML/CSS. – Murphy

+0

Кажется маловероятным, что выход журнала ошибок имеет фиксированный порядок - но, конечно, вы могли бы использовать индексирование, если бы это произошло. Но, возможно, OP даже не контролирует выход (скажем, потому что он поступает из внешнего источника). Это может объяснить ограничение на изменение содержания документа. – ekhumoro

Смежные вопросы