利用delegate实现部分内容高亮
MVC模式是Qt中相当重要的一环,比如在QTableView中,我们想实现其中部分内容高亮:
解决理论:让view能识别html语言,在model层给数据设置上html。
解决方案:QAbstractItemDelegate
具体代码:在QAbstractItemDelegate类中的paint()方法实现:
def paint(self, painter, option, index):
options = QtWidgets.QStyleOptionViewItem(option)
self.initStyleOption(options,index)
style = QtGui.QApplication.style() if options.widget is None else options.widget.style()
doc = QtGui.QTextDocument()
doc.setHtml('<font color="red"><b> Zoom:</b></font> Ctrl+Mouse Scroll'+options.text)
options.text = ""
style.drawControl(QtWidgets.QStyle.CE_ItemViewItem, options, painter);
ctx = QtGui.QAbstractTextDocumentLayout.PaintContext()
# Highlighting text if item is selected
#if (optionV4.state & QStyle::State_Selected)
#ctx.palette.setColor(QPalette::Text, optionV4.palette.color(QPalette::Active, QPalette::HighlightedText));
textRect = style.subElementRect(QtWidgets.QStyle.SE_ItemViewItemText, options)
painter.save()
painter.translate(textRect.topLeft())
painter.setClipRect(textRect.translated(-textRect.topLeft()))
doc.documentLayout().draw(painter, ctx)
painter.restore()