После дальнейшего изучения параметров делегатов я нашел хорошую ссылку (к сожалению, больше недоступен) и придумал следующий гибрид, используя QItemDelegate и IsUserCheckable.
По сути, вам нужно расширить QItemDelegate и переопределить, используя функцию drawCheck для центрирования и используйте editorEvent
для обработки событий мыши и клавиатуры при настройке модели в соответствующем состоянии.
void drawCheck(QPainter* painter, QStyleOptionViewItem const& option, QRect const& rect, Qt::CheckState state) const
и
bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)
Также смотрите этот похожий вопрос здесь ...