Всем доброго дня!!!Устанавливаю делегат для редактирования вещественных чисел,в качестве QDoubleSpinBox ... но я хочу чтобы этот спин бокс был на QFrame. Фрейм и спинбокс пытаюсь агрегировать в один виджет вот таким образом: Код | 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); dsb = new QDoubleSpinBox(fr); dsb->setMinimum(0.0); dsb->setMaximum(999999.99); dsb->setDecimals(2); dsb->setSingleStep(1); 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); } };
|
Вроде все нормально работает входит в режим редактирования и сохраняет данные,только вот при входе в режим редактирования виджет сразу не получает фокус ввода,а после того как получит если я захочу перевести в режим редактирования след.элемент столбца мне нужно нужно несколько раз щелкнуть по нему...И к тому же он еще рисуется не на всю ячейку,такое ощущение,что он вообще рисуется поверх стандартного элемента редактирования ячейки... Я подозреваю,что все дело в моем определении виджета,только не могу разобраться как правильнее это сделать.. Помогите,пожалуйста, мне разобратья что не так
|