自定义代理编辑控件类TSpinBoxDelegate
自定义代理编辑控件类TSpinBoxBoxDelegate
自定义代理编辑控件类TSpinBoxBoxDelegate的定义过程
重写自定义代理编辑组件类的四个方法: 创建编辑组件、模型赋值给代理编辑组件、代理编辑组件数据到模型、更新位置
.h
#ifndef TSPINBOXDELEGATE_H
#define TSPINBOXDELEGATE_H#include <QObject>
#include <QStyledItemDelegate>class TSpinBoxDelegate : public QStyledItemDelegate
{Q_OBJECT
public:explicit TSpinBoxDelegate(QObject *parent = nullptr);QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;void setEditorData(QWidget *editor, const QModelIndex &index) const;void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const;
};#endif // TSPINBOXDELEGATE_H
.cpp
#include "tspinboxdelegate.h"
#include <QSpinBox>TSpinBoxDelegate::TSpinBoxDelegate(QObject *parent): QStyledItemDelegate{parent}
{
}
QWidget* TSpinBoxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{Q_UNUSED(option);Q_UNUSED(index);QSpinBox *spinBox = new QSpinBox(parent);spinBox->setFrame(false);spinBox->setMinimum(0);spinBox->setMaximum(50000);return editor;
}void TSpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{QSpinBox *spinBox = static_cast<QSpinBox *>editor;int value = spinBox->value();model->setData(index,value,Qt::EditRole);
}void TSpinBoxDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{QSpinBox *spinBox = static_cast<QSpinBox *>editor;int value = index.model()->data(index,Qt::EditRole).toInt();spinBox->setValue(value);
}void TSpinBoxDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
{Q_UNUSED(index);editor->setGeometry(option.rect);
}
TSpinBoxBoxDelegate自定义编辑控件总结
1. 统一继承自 QStyledItemDelegate
2. 根据TSpinBoxBox的特性,赋值 为int类型
3. 将QWidget 转换为 TSpinBoxBox ,使用static_cast