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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt 4.1.0: делегаты и иже с ними  (Прочитано 6757 раз)
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« : Январь 10, 2006, 10:57 »

Недавно решил перенести одну свою прогу с 3.3.3 на 4.1.0. В проге был большой такой QListView, с кучей итемов. В общем, переделать все это чудо под QTreeWidget не было бы особых проблем, если б не одно НО...
Каждый итем в списке, имея различные типы, должен отрисовываться по-своему, НО вот засада: в Model-View, оказывается, нельзя назначить одному View несколько делегатов для отрисовки  Грустный Можно только один, общий...
Я так и не понял - это либо регрессия в 4-й версии, т.е. Тролли либо недоглядели, либо еще не добавили такую возможность собственной отрисовки итемов, как это было в 3-й версии, либо... я уже начал стареть и не понимаю каких-то новых веяний в ООП?
Проблему я решил, сделав "фиктивный" делегат, который по индексу определял итем и вызывал его собственную виртуальную функцию отрисовки... А вот теперь думаю - а что, так и нада?
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #1 : Январь 11, 2006, 21:26 »

Да, нет так не надо. Дело в том что делегат предназначен для редактирования данных модели а не для отрисовки элемента в представлении. Поработай и создай свой класс представления например от QAbstractItemView.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #2 : Январь 12, 2006, 11:10 »

В том-то и дело, что мне не нужно создавать свой View, я просто хотел расширить существующий. А в доке про делегаты написано "for drawing and editing", насколько я помню...
Просто это ИМХо очень криво - для таких простых вещей свой класс отображения почти с нуля писать. Где же "code less - create more"?
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
nEoN
Гость
« Ответ #3 : Январь 12, 2006, 11:11 »

Цитата: "Mikhail"
Да, нет так не надо. Дело в том что делегат предназначен для редактирования данных модели а не для отрисовки элемента в представлении. ...

Я бы не согласился. Делегат задуман для взаимодействия элемента модели с GUI, в том числе и для отрисовки элемента. Для этого существует виртуальный метод QAbstractItemDelegate::paint ( ..., const QModelIndex & index ), который и должен заниматься отрисовкой отдельного элемента модели.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #4 : Январь 12, 2006, 11:29 »

Все верно. Но вопрос в чем - как заставить (правильно) разные элементы отрисовываться и редактироваться по-своему, если на одно отображение модно повесить только один делегат?
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
nEoN
Гость
« Ответ #5 : Январь 12, 2006, 11:53 »

Цитата: "Racheengel"
Все верно. Но вопрос в чем - как заставить (правильно) разные элементы отрисовываться и редактироваться по-своему, если на одно отображение модно повесить только один делегат?

По моему может быть только два варианта :
1) сам делегат отображает элементы, анализируя их тип.
2) как ты написал в первом посте, делегат выступает связующим звеном между представлением и элементами, вызывая из своих методов отрисовки/редактирования их аналоги  - виртуальные методы элементов.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #6 : Январь 12, 2006, 12:26 »

Ну да, я так и сделал... Просто более лучшего ничего не нашел.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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