Наследование от QDeclarativeItem. Маленький tip.
По умолчанию у QDeclarativeItem стоит флаг QGraphicsItem::ItemHasNoContents. Пол дня убил пока не раскопал почему программа не заходит в переопределённый метод paint моего компонента!
from PyQt4.QtCore import Qt
from PyQt4.QtGui import *
class RichTextItemDelegete(QAbstractItemDelegate):
def __init__(self, parent):
QAbstractItemDelegate.__init__(self, parent)
def paint(self, painter, option, index):
if option.state & QStyle.State_Selected:
painter.fillRect(option.rect, option.palette.highlight())
painter.setBrush(QColor(Qt.black))
document = QTextDocument()
document.setHtml(index.data(Qt.DisplayRole).toString())
context = QAbstractTextDocumentLayout.PaintContext()
context.palette = option.palette
if option.state & QStyle.State_Selected:
context.palette.setColor(QPalette.Text, Qt.white)
else:
context.palette.setColor(QPalette.Text, Qt.black);
painter.save()
layout = document.documentLayout()
painter.translate(0, option.rect.y())
layout.draw(painter, context)
painter.restore()
def sizeHint(self, option, index):
document = QTextDocument()
document.setHtml(index.data(Qt.DisplayRole).toString())
layout = document.documentLayout()
return layout.documentSize().toSize()