2017-01-20 4 views
1

Общим вопросом в сети является то, как отображать html с помощью qstyleditemdelegate в qlistview. Обычный ответ является вариантом следующего кода https://stackoverflow.com/a/5443112/2033030pyqt qstyleditemdelegate word wrap и html

class HTMLDelegate(QtGui.QStyledItemDelegate): 
    def paint(self, painter, option, index): 
     options = QtGui.QStyleOptionViewItemV4(option) 
     self.initStyleOption(options,index) 

     style = QtGui.QApplication.style() if options.widget is None else options.widget.style() 

     doc = QtGui.QTextDocument() 
     doc.setHtml(options.text) 

     options.text = "" 
     style.drawControl(QtGui.QStyle.CE_ItemViewItem, options, painter); 

     ctx = QtGui.QAbstractTextDocumentLayout.PaintContext() 
     if option.state & QStyle.State_Selected: 
      ctx.palette.setColor(QPalette.Text, option.palette.color(QPalette.Active, QPalette.HighlightedText)) 
     else: 
      ctx.palette.setColor(QPalette.Text, option.palette.color(QPalette.Active, QPalette.HighlightedText)) 


     textRect = style.subElementRect(QtGui.QStyle.SE_ItemViewItemText, options) 
     painter.save() 
     painter.translate(textRect.topLeft()) 
     painter.setClipRect(textRect.translated(-textRect.topLeft())) 
     doc.documentLayout().draw(painter, ctx) 

     painter.restore() 

    def sizeHint(self, option, index): 
     options = QtGui.QStyleOptionViewItemV4(option) 
     self.initStyleOption(options,index) 

     doc = QtGui.QTextDocument() 
     doc.setHtml(options.text) 
     doc.setTextWidth(options.rect.width()) 
     return QtCore.QSize(doc.idealWidth(), doc.size().height()) 

Это также то, что я на самом деле не понимая его. Итак, мой главный вопрос - как включить перенос слов? Я много пробовал, но так и не сделал.

Вопрос второй стороны: может кто-то объяснить мне, что делает этот код, это немного подозрительно в моих глазах. Сначала он создает параметр options var var из исходного параметра параметра, но код, по-видимому, использует один и другой ramdomly, поэтому я подозреваю, что мы могли бы просто использовать параметр параметра без изменений. то для этого требуется создать два раза QTextDocument, как по краске, так и по размеру. Тогда стиль используется в DrawControl, но не при рисовании QTextDocument ....

Я сохранил оба вопроса в одном сообщении, поэтому мы, надеюсь, вместе можем подойти к одному примеру кода, который имеет смысл и может использоваться многими как начальная точка.

ответ

0

Solutio было установить длину текста для ТекстовыйДокумента

doc.setTextWidth(options.rect.width()) 

Но это очень сложно, поэтому мы вернулись к использованию QListWidgets и теперь использует QML