2017-01-20 3 views
1

Eine häufige Frage im Netz ist, wie HTML mit qstyleditemdelegate in einem qlistview anzuzeigen. Die übliche Antwort ist eine Variante des folgenden Codes https://stackoverflow.com/a/5443112/2033030pyqt qstyleditemdelegate Wortumbruch und 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()) 

Dies ist auch das, was ich verwenden, ohne es wirklich zu verstehen. Meine Hauptfrage ist also, wie man den Zeilenumbruch aktiviert: Ich habe viele Dinge ausprobiert, habe sie aber nie gemacht.

Die zweite Seite Frage ist, kann mir jemand erklären, was dieser Code tut, ist es ein bisschen verdächtig in meinen Augen. Zuerst erstellt es eine OptionS var aus dem ursprünglichen Optionsparameter, aber der Code darunter scheint das eine und das andere ramdomly zu verwenden, also vermute ich, dass wir einfach den Optionsparameter ohne Änderungen verwenden könnten. Dann müssen Sie zweimal das QTextDocument erstellen, sowohl in paint als auch in sizeHint. Dann wird der Stil in DrawControl verwendet, aber nicht beim Zeichnen des QTextDocument ....

Ich habe beide Fragen in einem Beitrag gehalten, so dass wir hoffentlich zusammen einen Beispielcode finden können, der Sinn macht und von vielen als benutzt werden kann ein Anfangspunkt.

Antwort

0

Die solutio war für Textdocument-Textlänge einstellen

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

Aber das ist sehr kompliziert, so zurück wir QListWidgets und jetzt verwenden QML

zu verwenden
Verwandte Themen