网上常见的问题是如何在qlistview中使用qstyleditemdelegate显示html。通常的答案是以下代码https://stackoverflow.com/a/5443112/2033030
的变体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,但是下面的代码似乎使用了一个和另一个ramdomly,所以我怀疑我们可以只使用选项参数而不进行更改。那么它需要在paint和sizeHint中创建两次QTextDocument。然后在DrawControl中使用该样式,但在绘制QTextDocument时不使用....
我确实在一篇文章中保留了这两个问题,因此我们希望能够共同制定一个有意义的示例代码,并且可以被许多人用作起点。
答案 0 :(得分:0)
解决方案是为TextDocument设置文本长度
FileMode
但这非常复杂,所以我们恢复使用QListWidgets,现在使用QML