我正在尝试将所见即所得的 HTML 编辑器集成到我的 PyQT5 应用程序中。我有一个带有组合框的工具栏,该组合框具有多种块样式和一个 QTextEdit。这是我现在实现标题样式的代码(我只添加了相关部分):
self.text_edit.cursorPositionChanged.connect(self.check_newline)
self.bg_color_picker_action.triggered.connect(self.bg_pick_color)
def toggle_bold(self):
format = QTextCharFormat()
format.setFontWeight(QFont.Bold if self.bold_action.isChecked() else QFont.Normal)
cursor = self.text_edit.textCursor()
cursor.mergeCharFormat(format)
self.text_edit.mergeCurrentCharFormat(format)
self.text_edit.setFocus()
self.text_edit.document().setModified(True)
# Check if a new line has started, and if so make the style a paragraph
def check_newline(self):
cursor = self.text_edit.textCursor()
if cursor.positionInBlock() == 0:
fmt = cursor.blockFormat()
fmt.setHeadingLevel(0)
self.heading_combo.setCurrentIndex(0)
cursor.mergeBlockFormat(fmt)
self.text_edit.textCursor().mergeBlockFormat(fmt)
def apply_heading(self):
cursor = self.text_edit.textCursor()
fmt = cursor.blockFormat()
if self.heading_combo.currentText() == "Heading 1":
fmt.setHeadingLevel(1)
elif self.heading_combo.currentText() == "Heading 2":
fmt.setHeadingLevel(2)
elif self.heading_combo.currentText() == "Heading 3":
fmt.setHeadingLevel(3)
elif self.heading_combo.currentText() == "Heading 4":
fmt.setHeadingLevel(4)
elif self.heading_combo.currentText() == "Heading 5":
fmt.setHeadingLevel(5)
elif self.heading_combo.currentText() == "Heading 6":
fmt.setHeadingLevel(1)
elif self.heading_combo.currentText() == "Paragraph":
fmt.setHeadingLevel(0)
self.text_edit.document().setModified(True)
cursor.mergeBlockFormat(fmt)
self.text_edit.textCursor().mergeBlockFormat(fmt)
print(self.text_edit.toHtml())
每次更改标题样式时我都会打印 html 以帮助我进行调试,它显示了对 html 的正确更改,并带有正确的标签,即
<h1>
、<h2>
、<p>
等。但是,除非我将它保存到文件中,否则不会反映在 QTextEdit 中,关闭程序然后再次打开文件。将 QTextEdit 的 html 设置为它自己的 html (self.text_edit.setHtml(self.text_edit.toHtml())
) 没有帮助,并且还会导致撤消历史记录被重置。其他更改,如粗体、斜体和下划线,会立即显示出来。
我试过使用:
1.
self.text_edit.setHtml(self.text_edit.toHtml())
self.text_edit.update()
和self.text_edit.repaint
new_fragment = QTextDocumentFragment(old_doc)
new_html = new_fragment.toHtml()```