3 #include <QApplication>
7 QStyledItemDelegate(parent)
17 QStyleOptionViewItemV4 viewItemOption(option);
19 if (index.column() == 0)
21 const int textMargin = QApplication::style()->pixelMetric(QStyle::PM_FocusFrameHMargin) + 1;
22 QRect newRect = QStyle::alignedRect(option.direction, Qt::AlignCenter,
23 QSize(option.decorationSize.width() + 5,option.decorationSize.height()),
24 QRect(option.rect.x() + textMargin, option.rect.y(),
25 option.rect.width() - (2 * textMargin), option.rect.height()));
26 viewItemOption.rect = newRect;
29 QStyledItemDelegate::paint(painter, viewItemOption, index);
36 Qt::ItemFlags flags = model->flags(index);
37 if (!(flags & Qt::ItemIsUserCheckable) || !(flags & Qt::ItemIsEnabled))
40 QVariant value = index.data(Qt::CheckStateRole);
45 if (event->type() == QEvent::MouseButtonRelease)
47 const int textMargin = QApplication::style()->pixelMetric(QStyle::PM_FocusFrameHMargin) + 1;
48 QRect checkRect = QStyle::alignedRect(option.direction, Qt::AlignCenter,
49 option.decorationSize,
50 QRect(option.rect.x() + (2 * textMargin), option.rect.y(),
51 option.rect.width() - (2 * textMargin),
52 option.rect.height()));
54 if (!checkRect.contains(static_cast<QMouseEvent*>(event)->pos()))
57 else if (event->type() == QEvent::KeyPress)
59 if (static_cast<QKeyEvent*>(event)->key() != Qt::Key_Space&&
static_cast<QKeyEvent*
>(event)->key() != Qt::Key_Select)
67 Qt::CheckState state = (
static_cast<Qt::CheckState
>(value.toInt()) == Qt::Checked ? Qt::Unchecked : Qt::Checked);
69 return model->setData(index, state, Qt::CheckStateRole);
Just use a delegate to render checkboxes centralized on a view.