QListWidget
默认不渲染HTML,但是为此Qt提供了委托类,允许自定义视图。
在这种情况下,我们使用以下委托:
#ifndef HTMLDELEGATE_H
#define HTMLDELEGATE_H
#include <QPainter>
#include <QStyledItemDelegate>
#include <QTextDocument>
class HtmlDelegate : public QStyledItemDelegate
{
public:
void paint(QPainter* painter, const QStyleOptionViewItem & option, const QModelIndex &index) const
{
QStyleOptionViewItem options = option;
initStyleOption(&options, index);
painter->save();
QTextDocument doc;
doc.setHtml(options.text);
options.text = "";
options.widget->style()->drawControl(QStyle::CE_ItemViewItem, &options, painter);
painter->translate(options.rect.left(), options.rect.top());
QRect clip(0, 0, options.rect.width(), options.rect.height());
doc.drawContents(painter, clip);
painter->restore();
}
QSize sizeHint ( const QStyleOptionViewItem & option, const QModelIndex & index ) const
{
QStyleOptionViewItem options = option;
initStyleOption(&options, index);
QTextDocument doc;
doc.setHtml(options.text);
doc.setTextWidth(options.rect.width());
return QSize(doc.idealWidth(), doc.size().height());
}
};
#endif
然后使用QListWidget
的setItemDelegate()
方法,如下所示:
ui->listWidget->setItemDelegate(new HtmlDelegate);
获取以下图像中显示的内容:
![enter image description here](https://istack.dev59.com/pn7sB.webp)
完整示例可在以下链接中找到:
link。