Russian Qt Forum

Qt => Model-View (MV) => Тема начата: Flake от Март 23, 2009, 14:42



Название: Вытянуть значение из стандартного делегата.
Отправлено: Flake от Март 23, 2009, 14:42
В методе
Код:
setModelData ( QWidget * editor, QAbstractItemModel * model, const QModelIndex & index ) const
нужно вытянуть из editor значение чтобы присвоить model, как сделать?


Название: Re: Вытянуть значение из стандартного делегата.
Отправлено: spirit от Март 23, 2009, 14:47
а что за виджет в createEditor делегата создается?
закастить к нужному виджету надо, например
Код
C++ (Qt)
...
QLineEdit *le = qobject_cast<QLineEdit *>(editor);
if (le)
  model->setData(index, le->text());
...
 


Название: Re: Вытянуть значение из стандартного делегата.
Отправлено: Flake от Март 23, 2009, 15:26
Код
C++ (Qt)
QWidget* editor = QItemDelegate::createEditor(parent, option, index);

Вот какой создаётся, поэтому и спрашиваю :)


Название: Re: Вытянуть значение из стандартного делегата.
Отправлено: spirit от Март 23, 2009, 15:29
м... а зачем явно такой код юзать? почему из модели данные сразу взять нелязя после сигнала QAbstractItemDelegate::commitData?


Название: Re: Вытянуть значение из стандартного делегата.
Отправлено: Flake от Март 23, 2009, 15:33
А мне нужно сравнить текущее значение в модели с новым, которое в editor'e


Название: Re: Вытянуть значение из стандартного делегата.
Отправлено: spirit от Март 23, 2009, 15:38
так тогда виджет лучше получать через QWidget * QAbstractItemView::indexWidget ( const QModelIndex & index ) const и потом кастить. а еще лучше свой делегат сделать и в setModelData делегата делать проверку.


Название: Re: Вытянуть значение из стандартного делегата.
Отправлено: Flake от Март 23, 2009, 15:41
Так я так и делаю, мне в setModelData надо из editor'а получить данные чтобы сравнить с данными из модели. Вот я не знаю как мне кастить, в этом и есть вопрос. Как для стандартного понятно, ты код привел выше.


Название: Re: Вытянуть значение из стандартного делегата.
Отправлено: spirit от Март 23, 2009, 15:45
прокастить к необходимому эдитору будет не очень удобно, ибо стандартный делегат создает эдиторы при помощи QItemEditorFactory, а он возвращает 8 разных эдиторов.


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

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


Название: Re: Вытянуть значение из стандартного делегата.
Отправлено: spirit от Март 23, 2009, 15:55
если просто текстовое, то кастить к QLineEdit как я выше показал.


Название: Re: Вытянуть значение из стандартного делегата.
Отправлено: spirit от Март 23, 2009, 15:57
Но если указать QLineEdit, то рамка больше становится  ;D как это поправить, а бросается в глаза.

QLineEdit::setFrame в false сбрось.


Название: Re: Вытянуть значение из стандартного делегата.
Отправлено: Flake от Март 23, 2009, 16:02
Супер! Спасибо за помощь.