在PyQt QTreeView项中,如何为特定列块设置颜色

时间:2016-12-08 12:06:19

标签: pyqt qtreeview

使用基于PyQt4的QTreeView,我创建了2个xml树小部件。从两棵树中,想要比较所选项目并突出显示差异。例如,

左弦:" CompareString" 正确的字符串:" ComPareStringRight"

差异的观察:

  • 左[0:2]与右[0:2]
  • 相同
  • 左[3:3]与右[3:3]
  • 不同
  • 左[4-12]与右[4-12]
  • 相同
  • 中没有右[13-17]

现在,想要根据以下颜色设置颜色:

  • 匹配字符 - 默认
  • 不同的角色 - 橙色
  • 添加了字符 - 绿色
  • 已删除的字符 - 红色

我该如何实现?无法找到任何参考实现来接收。请提出一条前进的道路。

class QCustomDelegate (QItemDelegate):
  global showDiffPaint
  def paint (self, painterQPainter, optionQStyleOptionViewItem, indexQModelIndex):
    column = indexQModelIndex.column()
    if showDiffPaint == 1:
      QItemDelegate.paint(self, painterQPainter, optionQStyleOptionViewItem, indexQModelIndex)
    else:
      QItemDelegate.paint(self, painterQPainter, optionQStyleOptionViewItem, indexQModelIndex)

1 个答案:

答案 0 :(得分:0)

挖掘后,发现将文本转换为html很有用,如下所示。 然而,由于"发现了错误。和<和>字符显示。我认为我需要以某种方式逃脱...

      options = QStyleOptionViewItemV4(option)
      doc = QTextDocument()
      doc.setHtml(txt1)
      doc.setTextWidth(option.rect.width())
      style = QApplication.style()
      style.drawControl(QStyle.CE_ItemViewItem, options, painter)
      ctx = QAbstractTextDocumentLayout.PaintContext()
      textRect = style.subElementRect(QStyle.SE_ItemViewItemText,
                                    options)
      painter.translate(textRect.topLeft())
      painter.setClipRect(textRect.translated(-textRect.topLeft()))
      doc.documentLayout().draw(painter, ctx)