Russian Qt Forum
Ноябрь 23, 2024, 20:06 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как обработать событие Делегата?  (Прочитано 2864 раз)
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?Непонимающий
Записан
asvil
Гость
« Ответ #1 : Октябрь 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 );
Записан
NetWorm
Гость
« Ответ #2 : Октябрь 09, 2011, 11:01 »

Так Это понятно!!! Но он не хочет принимать данные в результирующей таблице... т.е. он в ячейке показывает значение то которое нужно, но если не нажать Enter то он его не зафиксирует в самой БД
Записан
asvil
Гость
« Ответ #3 : Октябрь 09, 2011, 11:07 »

где-то надо сделать submit или submitAll();
Записан
NetWorm
Гость
« Ответ #4 : Октябрь 09, 2011, 13:39 »

Благодарю!!!! Помогло!!!!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.141 секунд. Запросов: 23.