File: centerediconitemdelegate.cpp

package info (click to toggle)
sqlitestudio 3.4.21%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 54,880 kB
  • sloc: ansic: 406,208; cpp: 123,872; yacc: 2,692; tcl: 497; sh: 462; xml: 426; makefile: 19
file content (35 lines) | stat: -rw-r--r-- 1,068 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include "centerediconitemdelegate.h"
#include <QApplication>
#include <QPainter>

CenteredIconItemDelegate::CenteredIconItemDelegate(QObject* parent) :
    QStyledItemDelegate(parent)
{
}

void CenteredIconItemDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
{
    if (!index.isValid())
        return;

    QStyleOptionViewItem opt = option;
    initStyleOption(&opt, index);

    // disable default icon
    opt.icon = QIcon();
    if (opt.features.testFlag(QStyleOptionViewItem::HasDecoration))
        opt.features ^= QStyleOptionViewItem::HasDecoration;

    // draw default item
    QApplication::style()->drawControl(QStyle::CE_ItemViewItem, &opt, painter, 0);

    const QRect r = option.rect;

    // get pixmap
    QIcon icon = qvariant_cast<QIcon>(index.data(Qt::DecorationRole));
    QPixmap pix = icon.pixmap(r.size());

    // draw pixmap at center of item
    const QPoint p = QPoint((r.width() - pix.width()) / 2, (r.height() - pix.height()) / 2);
    painter->drawPixmap(r.topLeft() + p, pix);
}