Название: Как обработать событие Делегата?
Отправлено: NetWorm от Октябрь 09, 2011, 09:05
Есть делегат..... BoxDelegate::BoxDelegate(QList< QPair<QString,QString> > &aValues, QObject *parent) :QItemDelegate(parent){ Value = aValues; } BoxDelegate::~BoxDelegate(){ } QWidget *BoxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &) const{ QComboBox *editor = new QComboBox(parent); QList< QPair<QString,QString> >::const_iterator it=Value.begin(); while (it != Value.end()) { const QPair <QString,QString> aPair = *it; editor->addItem(aPair.first,aPair.second); ++it; } return editor; } void BoxDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const{ QComboBox *ComboBox = static_cast<QComboBox*>(editor); int value = index.model()->data(index, Qt::DisplayRole).toInt(); ComboBox->setCurrentIndex(ComboBox->findData(value)); } void BoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const{ QComboBox *ComboBox = static_cast<QComboBox*>(editor); QVariant value = ComboBox->itemData(ComboBox->currentIndex()).toInt(); model->setData(index, value, Qt::EditRole); } void BoxDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const{ editor->setGeometry(option.rect); }
Затем я его присваиваю таблице BoxDelegate *box = new BoxDelegate(aValues); ui->sprTable->setItemDelegateForColumn(3,Box);
Все нормально при начале редактирования появляется КомбоБокс... Но когда я выбираю значение из комбобокса, для того чтобы они принялись надо нажимать Enter а как мне сделать чтоб это вызвалось автоматически... Например срабатывал сигнал dataChanged????
Название: Re: Как обработать событие Делегата?
Отправлено: asvil от Октябрь 09, 2011, 10:22
слот в делегат currentIndexChanged ( int index ). затем в createEditor connect(editor, SIGNAL(), this, SLOT()); затем в слоте currentIndexChanged ( int index ) QWidget *editor = qobject_cast<QWidget*>(sender()); emit closeEditor ( editor, QAbstractItemDelegate::EndEditHint hint = NoHint ); emit commitData ( editor );
Название: Re: Как обработать событие Делегата?
Отправлено: NetWorm от Октябрь 09, 2011, 11:01
Так Это понятно!!! Но он не хочет принимать данные в результирующей таблице... т.е. он в ячейке показывает значение то которое нужно, но если не нажать Enter то он его не зафиксирует в самой БД
Название: Re: Как обработать событие Делегата?
Отправлено: asvil от Октябрь 09, 2011, 11:07
где-то надо сделать submit или submitAll();
Название: Re: Как обработать событие Делегата?
Отправлено: NetWorm от Октябрь 09, 2011, 13:39
Благодарю!!!! Помогло!!!!
|