Для моего QTextEdit я хотел использовать что-то чрезвычайно простое, вложенное выделение, которое я сделал, возясь с W3Schools Try It!, который выглядит следующим образом.
Насколько я могу судить, я использовал только вещи из поддерживаемого подмножества HTML в Qt (см. HTML в коде ниже, используются только отступы, поля и фоновый цвет).
Я не мог получить аналогичный рендер, похоже, работал только фоновый цвет.
Я сделал новый проект, чтобы сделать простой тест, используя жестко закодированный HTML/стиль, а не мою процедурную генерацию, и все же он не отображается должным образом.
Вот код.
import sys
from PySide6.QtWidgets import QApplication, QTextEdit, QMainWindow
app = QApplication(sys.argv)
test_window = QMainWindow()
test_text_edit = QTextEdit()
html = """
<!DOCTYPE html>
<html>
<head>
<style>
span.a {
padding: 2px;
margin: -2px;
background-color: orange;
}
span.b {
background-color: powderblue;
}
</style>
</head>
<body>
<div>volutpat. <span class="a">Aliquam <span class="b">venenatis</span> gravida</span> nisl</div>
</body>
</html>
"""
test_text_edit.setHtml(html)
test_window.setCentralWidget(test_text_edit)
test_window.show()
sys.exit(app.exec_())
Вот результат, которому не хватает резкого количества стилей, я сошел с ума или это не должно выглядеть в основном идентично в соответствии с документацией? Не хватает отступов, которые делают вложенность более четкой?
Кажется, проблема с маржей известна Стиль маржи не имеет эффект в текстовой метке qt Rich Text, но никто не ответил и на этот вопрос.
Кто-нибудь знает какие-либо исправления/обходные пути? Или где это задокументировано как известное ограничение Qt?
как я использую QTextEdit в pyqt5, чтобы показать весь стиль html (включая стиль css) также связан, но не является дубликатом, он просто указывает на документ того CSS, за которым он следует, он делает не объясняет, почему он не следует, или как следовать стандарту, которому, как он говорит, он следует.
span { display: inline-block; }
. Другое дело, что вам нужно добавить поля, отступы и границы, чтобы рассчитать общий размер/длину элемента. Использование* { box-sizing: border-box; }
сохранит границу и отступы внутри элемента. Поля всегда находятся за пределами элемента. - person bron   schedule 28.02.2021margin-*
, они всегда ссылаются на поля абзаца. Единственной возможностью было бы создать подкласс QTextDocument и/или QTextEdit и вручную нарисовать фон, используя пользовательский формат, чтобы идентифицировать специальное выделение. Если вам нужна полная поддержка HTML/CSS, используйте QWebEngineView. - person musicamante   schedule 28.02.2021setHtml()
не помещает этот HTML в текстовый элемент управления, а анализирует данное содержимое с помощью парсера Qt html и генерирует/изменяет базовый QTextDocument. - person musicamante   schedule 28.02.2021