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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вытянуть значение из стандартного делегата.  (Прочитано 6363 раз)
Flake
Гость
« : Март 23, 2009, 14:42 »

В методе
Код:
setModelData ( QWidget * editor, QAbstractItemModel * model, const QModelIndex & index ) const
нужно вытянуть из editor значение чтобы присвоить model, как сделать?
Записан
spirit
Гость
« Ответ #1 : Март 23, 2009, 14:47 »

а что за виджет в createEditor делегата создается?
закастить к нужному виджету надо, например
Код
C++ (Qt)
...
QLineEdit *le = qobject_cast<QLineEdit *>(editor);
if (le)
  model->setData(index, le->text());
...
 
Записан
Flake
Гость
« Ответ #2 : Март 23, 2009, 15:26 »

Код
C++ (Qt)
QWidget* editor = QItemDelegate::createEditor(parent, option, index);

Вот какой создаётся, поэтому и спрашиваю Улыбающийся
Записан
spirit
Гость
« Ответ #3 : Март 23, 2009, 15:29 »

м... а зачем явно такой код юзать? почему из модели данные сразу взять нелязя после сигнала QAbstractItemDelegate::commitData?
Записан
Flake
Гость
« Ответ #4 : Март 23, 2009, 15:33 »

А мне нужно сравнить текущее значение в модели с новым, которое в editor'e
Записан
spirit
Гость
« Ответ #5 : Март 23, 2009, 15:38 »

так тогда виджет лучше получать через QWidget * QAbstractItemView::indexWidget ( const QModelIndex & index ) const и потом кастить. а еще лучше свой делегат сделать и в setModelData делегата делать проверку.
Записан
Flake
Гость
« Ответ #6 : Март 23, 2009, 15:41 »

Так я так и делаю, мне в setModelData надо из editor'а получить данные чтобы сравнить с данными из модели. Вот я не знаю как мне кастить, в этом и есть вопрос. Как для стандартного понятно, ты код привел выше.
Записан
spirit
Гость
« Ответ #7 : Март 23, 2009, 15:45 »

прокастить к необходимому эдитору будет не очень удобно, ибо стандартный делегат создает эдиторы при помощи QItemEditorFactory, а он возвращает 8 разных эдиторов.
Записан
Flake
Гость
« Ответ #8 : Март 23, 2009, 15:52 »

А может тогда в createEditor не писать:
Код
C++ (Qt)
QWidget* editor = QItemDelegate::createEditor(parent, option, index);
А указывать конкретный виджет? А ассисте написано что для QString используется QLineEdit.

Но если указать QLineEdit, то рамка больше становится  Смеющийся как это поправить, а бросается в глаза.
« Последнее редактирование: Март 23, 2009, 15:55 от Flake » Записан
spirit
Гость
« Ответ #9 : Март 23, 2009, 15:55 »

если просто текстовое, то кастить к QLineEdit как я выше показал.
Записан
spirit
Гость
« Ответ #10 : Март 23, 2009, 15:57 »

Но если указать QLineEdit, то рамка больше становится  Смеющийся как это поправить, а бросается в глаза.

QLineEdit::setFrame в false сбрось.
Записан
Flake
Гость
« Ответ #11 : Март 23, 2009, 16:02 »

Супер! Спасибо за помощь.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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