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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Делегат для клетки  (Прочитано 4441 раз)
juvf
Программист
*****
Offline Offline

Сообщений: 570


Просмотр профиля
« : Февраль 03, 2012, 13:30 »

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

Сделать это в переопределённом делегате.
Который у тебя сейчас delegate.
Записан
juvf
Программист
*****
Offline Offline

Сообщений: 570


Просмотр профиля
« Ответ #2 : Февраль 03, 2012, 13:42 »

Сделать это в переопределённом делегате.
Который у тебя сейчас delegate.
Т.е. в IntegerDelegate нужно проверить № строки и вернуть в методе IntegerDelegate::сreateEditor() виджет либо спинбокс, либо лайнЕдит. Была такая мысль, но как-то на костыль похоже. А в редакторах свойств, типа PropertyBrowser, так же делают?
Записан
Bepec
Гость
« Ответ #3 : Февраль 03, 2012, 13:43 »

Возьми и посмотри Веселый

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

PS ради интереса делал себе модельку с 10,000,000 элементами.  1 делегат. А если б их было 3? Веселый
Записан
juvf
Программист
*****
Offline Offline

Сообщений: 570


Просмотр профиля
« Ответ #4 : Февраль 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 ((
Записан
Bepec
Гость
« Ответ #5 : Февраль 03, 2012, 13:57 »

Умница. Теперь умножь эти операции на количество видимых ячеек Улыбающийся Примерно у меня было тысячи 4 ^.^
Записан
juvf
Программист
*****
Offline Offline

Сообщений: 570


Просмотр профиля
« Ответ #6 : Февраль 03, 2012, 14:05 »

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

В делегате можно узнать, понять, проанализировать информацию, хранящуюся в ячейке, её месторасположение/формат и вызвать соответствующий делегат.
Так что 1 делегат спокойно справится со всеми необходимыми тебе операциями.
Записан
juvf
Программист
*****
Offline Offline

Сообщений: 570


Просмотр профиля
« Ответ #8 : Февраль 03, 2012, 14:46 »

В делегате можно узнать, понять, проанализировать информацию, хранящуюся в ячейке, её месторасположение/формат и вызвать соответствующий делегат.
Так что 1 делегат спокойно справится со всеми необходимыми тебе операциями.
+1
Говорю же, нет возможности анализировать информацию хранящуюся в ячейке, от сюда и ноги проблемы.
Записан
Bepec
Гость
« Ответ #9 : Февраль 03, 2012, 15:09 »

Парень, аууууу...

Тебе в делегат передаётся указатель на модель...
Привести её к своему типу, и в твоём распоряжении все данные твоей модели, вплоть до адресов памяти третьей сбоку сине-зелёной ячейки с белым крестиком.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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