Здраствуйте...Воспользовался Вашим советом
тогда системмная ошибка вылазиет...
Хм, какая?
Вообще, лучше фрейм и спинбокс агрегировать в один виджет, предоставив необходимый функционал. А то в методах setEditorData() и setModelData() надо будет копать до QDoubleSpinBox, что как-то не очень.
Все нормально вроде работало...и вот бнаружился такой касяк...почему-то мой виджет переопределенный не получает фокус ввода. И вообще такое ощущение,что он ложится поверх обычного QDoubleSpinBox,который и получает фокус ввода. Вот как я создаю свой виджет:
C++ (Qt)
class EditWidg : public QWidget{
Q_OBJECT
public:
EditWidg(QWidget *parent = 0): QWidget(parent){
fr=new QFrame(this);
fr->setFrameShape(QFrame::Box);
fr->setFrameShadow(QFrame::Sunken);
fr->setFixedSize(105,32);
dsb = new QDoubleSpinBox(fr);
dsb->setMinimum(0.0);
dsb->setMaximum(999999.99);
dsb->setDecimals(2);
dsb->setSingleStep(1);
dsb->setFixedSize(98,22);
QGridLayout *gridLayout = new QGridLayout(fr);
gridLayout->setContentsMargins(1, 0, 3, 0);
gridLayout->addWidget(dsb, 0, 0, 1, 1);
}
~EditWidg(){}
void setValue(double d){
dsb->setValue(d);
}
double value(){
return dsb->value();
}
void interpretText(){
dsb->interpretText();
}
QFrame *fr;
QDoubleSpinBox *dsb;
};
class MyDSBDelegate : public QItemDelegate{
Q_OBJECT
public:
MyDSBDelegate(QObject *parent=0):QItemDelegate(parent){}
~MyDSBDelegate(){}
QWidget *createEditor(QWidget *parent,const QStyleOptionViewItem &/*option*/,const QModelIndex &/*index*/) const{
EditWidg *editor=new EditWidg(parent);
editor->installEventFilter(const_cast<MyDSBDelegate*>(this));
return editor;
}
void setEditorData(QWidget *editor,const QModelIndex &index) const{
double value = index.model()->data(index, Qt::EditRole).toDouble();
EditWidg *dsb = static_cast<EditWidg*>(editor);
dsb->setValue(value);
}
void setModelData(QWidget *editor,QAbstractItemModel *model,const QModelIndex &index) const{
EditWidg *dsb = static_cast<EditWidg*>(editor);
dsb->interpretText();
double value = dsb->value();
model->setData(index, value);
}
void updateEditorGeometry(QWidget *editor,const QStyleOptionViewItem &option,const QModelIndex &index) const{
editor->setGeometry(option.rect);
}
};