Russian Qt Forum

Qt => Model-View (MV) => Тема начата: juvf от Февраль 03, 2012, 13:30



Название: Делегат для клетки
Отправлено: juvf от Февраль 03, 2012, 13:30
код добавляет делегат для колонки 2
Код:
QTreeView *table = new QTreeView;
table->setModel(model);
IntegerDelegate *delegate = new  IntegerDelegate(this);
table->setItemDelegateForColumn(2, delegate);
Также можно добавить делегат для строки. А как сделать чтоб в одной колонке для разных строк были разные делегаты? Т.е. как сделать делегат для отдельной ячейки.


Название: Re: Делегат для клетки
Отправлено: Bepec от Февраль 03, 2012, 13:37
Сделать это в переопределённом делегате.
Который у тебя сейчас delegate.


Название: Re: Делегат для клетки
Отправлено: juvf от Февраль 03, 2012, 13:42
Сделать это в переопределённом делегате.
Который у тебя сейчас delegate.
Т.е. в IntegerDelegate нужно проверить № строки и вернуть в методе IntegerDelegate::сreateEditor() виджет либо спинбокс, либо лайнЕдит. Была такая мысль, но как-то на костыль похоже. А в редакторах свойств, типа PropertyBrowser, так же делают?


Название: Re: Делегат для клетки
Отправлено: Bepec от Февраль 03, 2012, 13:43
Возьми и посмотри :D

Сам подумай, что лучше - 3 разных делегата для 1 клетки, или 1 делегат, в котором 3 разных вызова?

PS ради интереса делал себе модельку с 10,000,000 элементами.  1 делегат. А если б их было 3? :D


Название: Re: Делегат для клетки
Отправлено: juvf от Февраль 03, 2012, 13:52
придется посмотреть.

ps. для 100500 элементов я представля это так:
Всего 3 делегата. при создании строк смотрю что за сторока и чем её редактировать.
1-ая строка - это высота, значит к ячейке (0,2) прикручиваю делегат IntegerDelegate
2-я это ширина, значит к ячейке (1,2) прикручиваю делегат IntegerDelegate
3-я это цвет, значит к ячейке (2,2) прикручиваю делегат СolorDelegate
4-я это текст,  значит к ячейке (2,2) прикручиваю делегат TextDelegate
...

получается всего 3 делегата (по одному экземпляру на класс), и в каждой строке колонки 2 вызывается нужный.

Пойду учить уроки про PropertyBrowser ((


Название: Re: Делегат для клетки
Отправлено: Bepec от Февраль 03, 2012, 13:57
Умница. Теперь умножь эти операции на количество видимых ячеек :) Примерно у меня было тысячи 4 ^.^


Название: Re: Делегат для клетки
Отправлено: juvf от Февраль 03, 2012, 14:05
ааааа,  типа долго будет строить таблицу. В моём случае экономия на спичках. Да и вообще спор ни о чем.
Цитировать
что лучше - 3 разных делегата для 1 клетки, или 1 делегат, в котором 3 разных вызова
В моем случае лучше для каждой клетки указывать делегат на момент создания клетки. У меня этих клеток не более 100. И нет возможности в самом делегате понять какой виджет нужен для редактирования. Если нельзя для отдельной клетки делегат - так нельзя и точка. Буду как-то выкручиваться. В чем спор то?


Название: Re: Делегат для клетки
Отправлено: Bepec от Февраль 03, 2012, 14:12
В делегате можно узнать, понять, проанализировать информацию, хранящуюся в ячейке, её месторасположение/формат и вызвать соответствующий делегат.
Так что 1 делегат спокойно справится со всеми необходимыми тебе операциями.


Название: Re: Делегат для клетки
Отправлено: juvf от Февраль 03, 2012, 14:46
В делегате можно узнать, понять, проанализировать информацию, хранящуюся в ячейке, её месторасположение/формат и вызвать соответствующий делегат.
Так что 1 делегат спокойно справится со всеми необходимыми тебе операциями.
+1
Говорю же, нет возможности анализировать информацию хранящуюся в ячейке, от сюда и ноги проблемы.


Название: Re: Делегат для клетки
Отправлено: Bepec от Февраль 03, 2012, 15:09
Парень, аууууу...

Тебе в делегат передаётся указатель на модель...
Привести её к своему типу, и в твоём распоряжении все данные твоей модели, вплоть до адресов памяти третьей сбоку сине-зелёной ячейки с белым крестиком.