{
public:
...
void paint
(QPainter* painter,
const QStyleOptionViewItem
& option,
const QModelIndex
& index
) const {
// calculate suitable area for text (excluding decorations)
QString text
= index.
data(Qt
::DisplayRole).
toString();
QRect displayRect
= calcDisplayRect
(text, option.
fontMetrics);
// calculate suitable area for decoration on the left
QIcon icon1
= qvariant_cast<QIcon>
(index.
data(Qt
::DecorationRole));
QPixmap pixmap1
= icon1.
pixmap(option.
decorationSize);
QRect decoration1Rect
= calcDecorationRect
(pixmap1, Qt
::AlignLeft);
// calculate suitable area for decoration on the right
QIcon icon2
= qvariant_cast<QIcon>
(index.
data(Qt
::UserRole));
QPixmap pixmap2
= icon2.
pixmap(option.
decorationSize);
QRect decoration2Rect
= calcDecorationRect
(pixmap2, Qt
::AlignRight);
// draw 'em
drawBackground(painter, option, index);
drawDecoration(painter, option, decoration1Rect, pixmap1);
drawDecoration(painter, option, decoration2Rect, pixmap2);
drawDisplay(painter, option, displayRect, text);
drawFocus(painter, option, displayRect);
}
};
// usage:
listWidget->setItemDelegate(new MyItemDelegate(listWidget));
class MyItemDelegate : public QItemDelegate
{
public:
...
void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
{
// calculate suitable area for text (excluding decorations)
QString text = index.data(Qt::DisplayRole).toString();
QRect displayRect = calcDisplayRect(text, option.fontMetrics);
// calculate suitable area for decoration on the left
QIcon icon1 = qvariant_cast<QIcon>(index.data(Qt::DecorationRole));
QPixmap pixmap1 = icon1.pixmap(option.decorationSize);
QRect decoration1Rect = calcDecorationRect(pixmap1, Qt::AlignLeft);
// calculate suitable area for decoration on the right
QIcon icon2 = qvariant_cast<QIcon>(index.data(Qt::UserRole));
QPixmap pixmap2 = icon2.pixmap(option.decorationSize);
QRect decoration2Rect = calcDecorationRect(pixmap2, Qt::AlignRight);
// draw 'em
drawBackground(painter, option, index);
drawDecoration(painter, option, decoration1Rect, pixmap1);
drawDecoration(painter, option, decoration2Rect, pixmap2);
drawDisplay(painter, option, displayRect, text);
drawFocus(painter, option, displayRect);
}
};
// usage:
listWidget->setItemDelegate(new MyItemDelegate(listWidget));
To copy to clipboard, switch view to plain text mode
Bookmarks