QWidget *QDelegateSpinBoxInt::createEditor(QWidget* parent,const QStyleOptionViewItem& option,const QModelIndex& index)const { QSpinBox* lsbi=new QSpinBox(parent); lsbi->setMinimum(-77); //устанавливется отл. lsbi->setMaximum(99); //устанавливется отл. lsbi->setValue(55); //тут все ставится отл, а при отображении остается всегда 0 / Min, если Min>0 / Max, если Max<0 lsbi->setSingleStep(1); //устанавливется отл. lsbi->installEventFilter(const_cast<QDelegateSpinBoxInt*>(this)); return lsbi;}void TableDelegateInt::setEditorData(QWidget* wgt,const QModelIndex& index)const { int value=index.model()->data(index,Qt::EditRole).toInt(); QSpinBox* lsbi=static_cast<QSpinBox*>(wgt); lsbi->setValue(value);}void TableDelegateInt::setModelData(QWidget* wgt,QAbstractItemModel* model,const QModelIndex& index)const { QSpinBox* lsbi=static_cast<QSpinBox*>(wgt); lsbi->interpretText(); int value=lsbi->value(); model->setData(index,value,Qt::EditRole);}
void QAbstractItemView::openPersistentEditor ( const QModelIndex & index )void QAbstractItemView::closePersistentEditor ( const QModelIndex & index )void edit ( const QModelIndex & index )
class TableDelegateInt : public QItemDelegate { Q_OBJECT public: TableDelegateInt (int value=0,int min=-2147483647,int max=2147483647,int step=1,QObject* parent=0); QWidget* createEditor (QWidget* parent,const QStyleOptionViewItem& option,const QModelIndex& index) const; void setEditorData (QWidget* wgt,const QModelIndex& index) const; void setModelData (QWidget* wgt,QAbstractItemModel* model,const QModelIndex& index) const; void updateEditorGeometry (QWidget* wgt,const QStyleOptionViewItem& option,const QModelIndex& index) const; public slots: int SetMin (int value); int SetMax (int value); private: QSpinBox* dsbi; int dsbiMin; int dsbiMax; int dsbiStep; int dsbiValue;};
TableDelegateInt::TableDelegateInt(int value,int min,int max,int step,QObject* parent):QItemDelegate(parent){ dsbiValue =value; dsbiMin =min; dsbiMax =max; dsbiStep =step;}QWidget *TableDelegateInt::createEditor(QWidget* parent,const QStyleOptionViewItem& option,const QModelIndex& index)const { QSpinBox* lsbi=new QSpinBox(parent); lsbi->setMinimum(dsbiMin); lsbi->setMaximum(dsbiMax); lsbi->setSingleStep(dsbiStep); lsbi->setValue(dsbiValue); return lsbi;}void TableDelegateInt::setEditorData(QWidget* wgt,const QModelIndex& index)const { int value=index.model()->data(index,Qt::EditRole).toInt(); QSpinBox* lsbi=static_cast<QSpinBox*>(wgt); lsbi->setValue(value);}void TableDelegateInt::setModelData(QWidget* wgt,QAbstractItemModel* model,const QModelIndex& index)const { QSpinBox* lsbi=static_cast<QSpinBox*>(wgt); lsbi->interpretText(); int value=lsbi->value(); model->setData(index,value,Qt::EditRole);}void TableDelegateInt::updateEditorGeometry(QWidget* wgt,const QStyleOptionViewItem& option,const QModelIndex& index)const { wgt->setGeometry(option.rect);}
int TableDelegateInt::SetMin(int value){ dsbiMin=value; return dsbiMin;}int TableDelegateInt::SetMax(int value){ dsbiMax=value; return dsbiMax;}
QSpinBox* dsbi; int dsbiMin; int dsbiMax; int dsbiStep; int dsbiValue;