Добрый день.
Есть QCheckBox с моделью с делегатом.
Делегат описан следующим образом:
class BoxChannelItemDelegate : public QStyledItemDelegate{
Q_OBJECT
public:
explicit BoxChannelItemDelegate(QObject *parent = 0) : QStyledItemDelegate(parent){}
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const{
QStyleOptionViewItemV4 viewItemOption(option);
if (index.column() == 0) {
const int textMargin = QApplication::style()->pixelMetric(QStyle::PM_FocusFrameHMargin) + 1;
QRect newRect = QStyle::alignedRect(option.direction, Qt::AlignCenter,
QSize(option.decorationSize.width() + 5,option.decorationSize.height()),
QRect(option.rect.x() + textMargin, option.rect.y(),
option.rect.width() - (2 * textMargin), option.rect.height()));
viewItemOption.rect = newRect;
}
QStyledItemDelegate::paint(painter, viewItemOption, index);
}
virtual QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const{
qDebug() << Q_FUNC_INFO;
qDebug() << index.data();
if (index.column() == 0){
QCheckBox* checkbox = new QCheckBox(parent);
checkbox->setChecked(index.data().toBool());
return checkbox;
}
return parent;
}
virtual void setEditorData(QWidget *editor, const QModelIndex &index) const{
if (index.column() == 0){
QCheckBox* checkbox = qobject_cast<QCheckBox*>(editor);
checkbox->setChecked(index.data().toBool());
}
}
virtual void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const{
qDebug() << Q_FUNC_INFO;
if (index.column() == 0){
QCheckBox *checkbox = qobject_cast<QCheckBox*>(editor);
model->setData(index,checkbox->isChecked());
}
}
virtual void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const{
qDebug() << Q_FUNC_INFO;
editor->setGeometry(option.rect);
}
};
при этом в модели флаги для нулевого столбца указаны как Checkable
if(index.column() == 0) {
return QAbstractTableModel::flags(index) | Qt::ItemIsUserCheckable | Qt::ItemIsEditable;
}
И вроде всё хорошо. Он отображает checkbox в ячейке.
Но при нажатии на ячейку для редактировани, виджет checkboх создаётся прижатым к правому краю.
Как бы его отцентровать?
Отображение
Редактирование