我的开发环境是Pycharm内python+QT。自己碰到一个需求:
QTextEdit文本框内的几个特殊的字符串进行标记(字体/字号/颜色),字符串有可能改变。
我实际显示的东西是一个字典,通过如下方式打印
for key, value in MyInfo.items():
self.ui.QTextEdit.append('{key}:{value}'.format(key=key, value=value))
比如key2比较重要,需要highlight,怎么操作?
cursor = self.ui.QTextEdit.textCursor()#get current cursor
for key, value in MyInfo.items():
self.ui.QTextEdit.append('{key}:{value}'.format(key=key, value=value))
temp = '{key}'.format(key=key)
if temp == 'key2':#highlight Info
cursor.movePosition(QTextCursor.End)#move cursor to current text end
self.ui.QTextEdit.setTextCursor(cursor)
cursor.select(QTextCursor.LineUnderCursor)#select line of cursor
fmt = QTextCharFormat()
fmt.setForeground(Qt.red)# use red highlight
cursor.mergeCharFormat(fmt)
cursor.clearSelection()
cursor.movePosition(QTextCursor.Start)
self.ui.QTextEdit.setTextCursor(cursor)
else:
cursor.movePosition(QTextCursor.Start)
self.ui.QTextEdit.setTextCursor(cursor)
这部分代码原理是再打印信息时,根据字典的key值来判断是否打印到了想要标记的位置,如果是,直接将光标移动到文本末尾,设定此时光标所在行的字体格式(标红),完成之后将光标重新移动到文本开头。
cursor.select(QTextCursor.LineUnderCursor)是标记整行,还有标记word/block。
也试过用setstylesheet来标记,但是这个方法是标记整个文本的字体格式,显然不符合需求。
看了很多其他人写的,踩了很多坑,记录下来希望对大家有帮助。