#include "ndstyleditemdelegate.h" #include #include #include #include #include NdStyledItemDelegate::NdStyledItemDelegate(QObject *parent) : QStyledItemDelegate(parent), m_defaultFontSize(14) { } NdStyledItemDelegate::~NdStyledItemDelegate() { } void NdStyledItemDelegate::setFontSize(int size) { m_defaultFontSize = size; } //重载使可以支持富文本格式的文字 void NdStyledItemDelegate::paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const { QStyleOptionViewItem viewOption(option); initStyleOption(&viewOption, index); if (option.state.testFlag(QStyle::State_HasFocus)) viewOption.state = viewOption.state ^ QStyle::State_HasFocus; // ... 省略 // 设置显示文本为空,使用默认样式 QStyle *pStyle = viewOption.widget ? viewOption.widget->style() : QApplication::style(); QTextDocument doc; //外部修改了字体大小后,内部进行富文本的修改绘制。 if (m_defaultFontSize != 14) { viewOption.text.replace("font-size:14px",QString("font-size:%1px").arg(m_defaultFontSize)); } doc.setHtml(viewOption.text); viewOption.text.clear(); pStyle->drawControl(QStyle::CE_ItemViewItem, &viewOption, painter, viewOption.widget); QAbstractTextDocumentLayout::PaintContext paintContext; QRect textRect = pStyle->subElementRect(QStyle::SE_ItemViewItemText, &viewOption); painter->save(); // 坐标变换,将左上角设置为原点 painter->translate(textRect.topLeft()); // 设置HTML绘制区域 painter->setClipRect(textRect.translated(-textRect.topLeft())); doc.documentLayout()->draw(painter, paintContext); painter->restore(); }