我正在开发一个富文本编辑器,遇到了一个小问题,我用看起来像是“黑客”的方式解决了这个问题。
所以我想检查所选文本或光标位置的文本是否有任何格式、粗体、斜体等,并检查执行相应工作的相应按钮,但它变得很奇怪。
如果我做类似的事情
if self.ed.fontItalic() is True:
self.italic.setChecked(True)
else:
self.italic.setChecked(False)
if self.ed.fontUnderline() is True:
self.uline.setChecked(True)
else:
self.uline.setChecked(False)
其中“self.italic”和“self.uline”是可检查的QPushButtons;
仅检查光标下的格式,但不会检查斜体和下划线的两个按钮,即,如果所选文本具有机器人格式。
基本上,它会忽略选定的文本并查找光标下文本的格式。
所以我目前正在解析 html 以查看它是否具有格式;
def check_formatting(self):
if self.ed.textCursor().hasSelection():
print(self.ed.textCursor().selection().toHtml())
if "font-style:italic;" in self.ed.textCursor().selection().toHtml():
self.italic.setChecked(True)
else:
self.italic.setChecked(False)
if "text-decoration: underline;" in self.ed.textCursor().selection().toHtml():
self.uline.setChecked(True)
else:
self.uline.setChecked(False)
else:
if self.ed.fontItalic() is True:
self.italic.setChecked(True)
else:
self.italic.setChecked(False)
if self.ed.fontUnderline() is True:
self.uline.setChecked(True)
else:
self.uline.setChecked(False)
和在按钮单击时格式化所选文本或光标下的文本的代码如下
def set_italic(self):
if self.italic.isChecked():
self.ed.setFontItalic(True)
if self.ed.textCursor().hasSelection():
if self.ed.fontItalic() != QTextFormat.FontItalic:
self.ed.setFontItalic(True)
else:
self.ed.setFontItalic(False)
else:
self.ed.setFontItalic(False)
所有这些几乎都按预期工作,但感觉都超级hacky。并且通过 html 解析,显然,如果用户输入“font-style:italic;” 在文本编辑中并选择输入的文本,斜体按钮被选中。
我一直在互联网上浏览很多东西,但没有一个能像上面的代码那样帮助我实现。