ndstyleditemdelegate.cpp 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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)
  9. {
  10. }
  11. NdStyledItemDelegate::~NdStyledItemDelegate()
  12. {
  13. }
  14. //重载使可以支持富文本格式的文字
  15. void NdStyledItemDelegate::paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const
  16. {
  17. QStyleOptionViewItem viewOption(option);
  18. initStyleOption(&viewOption, index);
  19. if (option.state.testFlag(QStyle::State_HasFocus))
  20. viewOption.state = viewOption.state ^ QStyle::State_HasFocus;
  21. // ... 省略
  22. // 设置显示文本为空,使用默认样式
  23. QStyle *pStyle = viewOption.widget ? viewOption.widget->style() : QApplication::style();
  24. QTextDocument doc;
  25. doc.setHtml(viewOption.text);
  26. viewOption.text.clear();
  27. pStyle->drawControl(QStyle::CE_ItemViewItem, &viewOption, painter, viewOption.widget);
  28. QAbstractTextDocumentLayout::PaintContext paintContext;
  29. QRect textRect = pStyle->subElementRect(QStyle::SE_ItemViewItemText, &viewOption);
  30. painter->save();
  31. // 坐标变换,将左上角设置为原点
  32. painter->translate(textRect.topLeft());
  33. // 设置HTML绘制区域
  34. painter->setClipRect(textRect.translated(-textRect.topLeft()));
  35. doc.documentLayout()->draw(painter, paintContext);
  36. painter->restore();
  37. }