ndstyleditemdelegate.cpp 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #include "ndstyleditemdelegate.h"
  2. #include <QTextDocument>
  3. #include <QApplication>
  4. #include <QAbstractTextDocumentLayout>
  5. #include <QPainter>
  6. #include <QTextEdit>
  7. NdStyledItemDelegate::NdStyledItemDelegate(QObject *parent)
  8. : QStyledItemDelegate(parent), m_defaultFontSize(14)
  9. {
  10. }
  11. NdStyledItemDelegate::~NdStyledItemDelegate()
  12. {
  13. }
  14. void NdStyledItemDelegate::setFontSize(int size)
  15. {
  16. m_defaultFontSize = size;
  17. }
  18. //重载使可以支持富文本格式的文字
  19. void NdStyledItemDelegate::paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const
  20. {
  21. QStyleOptionViewItem viewOption(option);
  22. initStyleOption(&viewOption, index);
  23. if (option.state.testFlag(QStyle::State_HasFocus))
  24. viewOption.state = viewOption.state ^ QStyle::State_HasFocus;
  25. // ... 省略
  26. // 设置显示文本为空,使用默认样式
  27. QStyle *pStyle = viewOption.widget ? viewOption.widget->style() : QApplication::style();
  28. QTextDocument doc;
  29. //外部修改了字体大小后,内部进行富文本的修改绘制。
  30. if (m_defaultFontSize != 14)
  31. {
  32. viewOption.text.replace("font-size:14px",QString("font-size:%1px").arg(m_defaultFontSize));
  33. }
  34. doc.setHtml(viewOption.text);
  35. viewOption.text.clear();
  36. pStyle->drawControl(QStyle::CE_ItemViewItem, &viewOption, painter, viewOption.widget);
  37. QAbstractTextDocumentLayout::PaintContext paintContext;
  38. QRect textRect = pStyle->subElementRect(QStyle::SE_ItemViewItemText, &viewOption);
  39. painter->save();
  40. // 坐标变换,将左上角设置为原点
  41. painter->translate(textRect.topLeft());
  42. // 设置HTML绘制区域
  43. painter->setClipRect(textRect.translated(-textRect.topLeft()));
  44. doc.documentLayout()->draw(painter, paintContext);
  45. painter->restore();
  46. }