ColorDelegate.cpp 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #include "ColorDelegate.h"
  2. #include <qchar.h>
  3. #include <qcolor.h>
  4. void ColorDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
  5. {
  6. QStyleOptionViewItem opt = option;
  7. initStyleOption(&opt, index);
  8. // 获取文本
  9. QString text = index.data().toString();
  10. // 获取传入的数据
  11. bool isConnected = index.data(Qt::UserRole + 1).toBool();
  12. // 设置颜色
  13. if (isConnected)
  14. {
  15. opt.palette.setColor(QPalette::Text, QColor("#D2D2D2"));
  16. }
  17. else
  18. {
  19. opt.palette.setColor(QPalette::Text, QColor("#D21F21"));
  20. }
  21. // 清空 opt 的文本以避免重复绘制
  22. opt.text.clear();
  23. // 调用基类的 paint 方法以应用 QSS 样式
  24. // QStyledItemDelegate::paint(painter, opt, index);
  25. // 自定义绘制逻辑
  26. painter->save();
  27. // 设置悬浮效果
  28. if (option.state & QStyle::State_MouseOver)
  29. {
  30. painter->fillRect(option.rect, QColor("#438EFF"));
  31. }
  32. painter->setPen(opt.palette.color(QPalette::Text));
  33. // 获取样式表中的 padding-left 值
  34. QRect textRect = opt.rect.adjusted(12, 0, 0, 0);
  35. painter->drawText(textRect, Qt::AlignVCenter | Qt::TextSingleLine, text);
  36. painter->restore();
  37. }