got something to work... not perfect, but the icon will now keep aspect ration in the item. enjoy!!!

Qt Code:
  1. #include <QStyledItemDelegate>
  2. #include <QPainter>
  3.  
  4. class ItemDelegate : public QStyledItemDelegate
  5. {
  6. public:
  7. enum ItemDataRole { SubTextRole = Qt::UserRole + 100 };
  8.  
  9. ItemDelegate(QObject *parent = 0) : QStyledItemDelegate(parent) {}
  10. QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
  11. void paint(QPainter *p, const QStyleOptionViewItem &option, const QModelIndex &index) const;
  12. };
  13.  
  14. QSize ItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
  15. {
  16. QIcon icon = qvariant_cast<QIcon>(index.data(Qt::DecorationRole));
  17. QString line1 = index.data(Qt::DisplayRole).toString();
  18. //QString line2 = index.data(SubTextRole).toString();
  19.  
  20. int textW = option.fontMetrics.width(line1);
  21. QSize iconSize = icon.actualSize(option.decorationSize);
  22.  
  23. return QSize(iconSize.width() + 4,
  24. iconSize.height() + 2 + option.fontMetrics.lineSpacing() * 2 + 4);
  25. }
  26.  
  27. void ItemDelegate::paint(QPainter *p, const QStyleOptionViewItem &option, const QModelIndex &index) const
  28. {
  29. p->save();
  30.  
  31. QString line1 = index.data(Qt::DisplayRole).toString();
  32. QString line2 = index.data(SubTextRole).toString();
  33.  
  34. QStyleOptionViewItemV4 opt(option);
  35. initStyleOption(&opt, index);
  36.  
  37. QStyle *style = opt.widget->style();
  38. style->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, p, opt.widget);
  39.  
  40. if (option.state & QStyle::State_Selected)
  41. p->setPen(QPen(option.palette.brush(QPalette::HighlightedText), 0));
  42.  
  43. QRect itemRect = option.rect.adjusted(2, 2, -2, -2);
  44. QRect r = QStyle::alignedRect(opt.direction, Qt::AlignHCenter | Qt::AlignLeft, itemRect.size(), itemRect);
  45. opt.icon.paint(p, r);
  46.  
  47. int h = option.fontMetrics.lineSpacing();
  48. QRect textRect(itemRect.left(), itemRect.bottom() - h, itemRect.width(), h);
  49.  
  50. p->drawText(textRect, Qt::AlignVCenter | Qt::AlignHCenter, line1);
  51.  
  52. QColor subTextColor = p->pen().color();
  53. subTextColor.setAlphaF(.5);
  54.  
  55. p->restore();
  56. }
To copy to clipboard, switch view to plain text mode