qlistviewにqstyleditemdelegateを使ってhtmlを表示する方法はよくある質問です。いつもの答えは、これは私が実際にそれを理解せずに使用したものもあり、次のコード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())
の変種です。だから私の主な質問は、単語ラップを有効にする方法ですか?私は多くのことを試みましたが、決してそれを作ったことはありません。
第2の問題は、コードが何をしているのか誰かが私に説明することができます、それは私の目で少し疑わしいです。最初に、元のオプションパラメータからoptionS varを作成しますが、下のコードは矛盾しているようですので、変更せずにオプションパラメータを使用することができます。 QTextDocumentをpaintとsizeHintの両方で2回作成する必要があります。その後、スタイルはDrawControlで使用されますが、QTextDocumentを描画するときは使用されません。
始点。