#include <QStyledItemDelegate>
#include <QPainter>
class ItemDelegate : public QStyledItemDelegate
{
public:
enum ItemDataRole { SubTextRole = Qt::UserRole + 100 };
ItemDelegate
(QObject *parent
= 0) : QStyledItemDelegate
(parent
) {}};
{
QIcon icon
= qvariant_cast<QIcon>
(index.
data(Qt
::DecorationRole));
QString line1
= index.
data(Qt
::DisplayRole).
toString();
//QString line2 = index.data(SubTextRole).toString();
int textW = option.fontMetrics.width(line1);
QSize iconSize
= icon.
actualSize(option.
decorationSize);
return QSize(iconSize.
width() + 4,
iconSize.height() + 2 + option.fontMetrics.lineSpacing() * 2 + 4);
}
{
p->save();
QString line1
= index.
data(Qt
::DisplayRole).
toString();
QString line2
= index.
data(SubTextRole
).
toString();
QStyleOptionViewItemV4 opt(option);
initStyleOption(&opt, index);
QStyle *style
= opt.
widget->style
();
style
->drawPrimitive
(QStyle::PE_PanelItemViewItem,
&opt, p, opt.
widget);
if (option.
state & QStyle::State_Selected) p
->setPen
(QPen(option.
palette.
brush(QPalette::HighlightedText),
0));
QRect itemRect
= option.
rect.
adjusted(2,
2,
-2,
-2);
QRect r
= QStyle::alignedRect(opt.
direction, Qt
::AlignHCenter | Qt
::AlignLeft, itemRect.
size(), itemRect
);
opt.icon.paint(p, r);
int h = option.fontMetrics.lineSpacing();
QRect textRect
(itemRect.
left(), itemRect.
bottom() - h, itemRect.
width(), h
);
p->drawText(textRect, Qt::AlignVCenter | Qt::AlignHCenter, line1);
QColor subTextColor
= p
->pen
().
color();
subTextColor.setAlphaF(.5);
p->restore();
}
#include <QStyledItemDelegate>
#include <QPainter>
class ItemDelegate : public QStyledItemDelegate
{
public:
enum ItemDataRole { SubTextRole = Qt::UserRole + 100 };
ItemDelegate(QObject *parent = 0) : QStyledItemDelegate(parent) {}
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
void paint(QPainter *p, const QStyleOptionViewItem &option, const QModelIndex &index) const;
};
QSize ItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QIcon icon = qvariant_cast<QIcon>(index.data(Qt::DecorationRole));
QString line1 = index.data(Qt::DisplayRole).toString();
//QString line2 = index.data(SubTextRole).toString();
int textW = option.fontMetrics.width(line1);
QSize iconSize = icon.actualSize(option.decorationSize);
return QSize(iconSize.width() + 4,
iconSize.height() + 2 + option.fontMetrics.lineSpacing() * 2 + 4);
}
void ItemDelegate::paint(QPainter *p, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
p->save();
QString line1 = index.data(Qt::DisplayRole).toString();
QString line2 = index.data(SubTextRole).toString();
QStyleOptionViewItemV4 opt(option);
initStyleOption(&opt, index);
QStyle *style = opt.widget->style();
style->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, p, opt.widget);
if (option.state & QStyle::State_Selected)
p->setPen(QPen(option.palette.brush(QPalette::HighlightedText), 0));
QRect itemRect = option.rect.adjusted(2, 2, -2, -2);
QRect r = QStyle::alignedRect(opt.direction, Qt::AlignHCenter | Qt::AlignLeft, itemRect.size(), itemRect);
opt.icon.paint(p, r);
int h = option.fontMetrics.lineSpacing();
QRect textRect(itemRect.left(), itemRect.bottom() - h, itemRect.width(), h);
p->drawText(textRect, Qt::AlignVCenter | Qt::AlignHCenter, line1);
QColor subTextColor = p->pen().color();
subTextColor.setAlphaF(.5);
p->restore();
}
To copy to clipboard, switch view to plain text mode
Bookmarks