crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Делегат для конкретной ячейки в QTableView
JuryS1806
  опции профиля:
сообщение 21.1.2011, 2:09
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 93
Регистрация: 21.10.2009
Из: Нижний Новгород
Пользователь №: 1168

Спасибо сказали: 9 раз(а)




Репутация:   0  


Всем привет !

Здорово работать с QTableView при помощи делегатов, но вот такая незадача, например, я могу установить делегат для столбца или строки таблицы, а как присвить его конкретному индексу.

В MS Access это делается очень легко и непринужденно, а здесь я так понял можно только через setIndexWidget и созданный Widget подцеплять к четырем слотам, вместо простоейшего использования ItemDelegate.

В справке нашел:
Note: If a delegate has been assigned to both a row and a column, the row delegate (i.e., this delegate) will take presedence and manage the intersecting cell index.
т.е. как бы если назначить делегат для строки и столбца, будет работать в ячейки пересечения, но почему то он работает и по гориз и по верт.

Спасибо заранее за помощь !

P.S.
Any existing row delegate for row will be removed, but not deleted. QAbstractItemView does not take ownership of delegate.
т.е. опять memory leaks ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
igor_bogomolov
  опции профиля:
сообщение 21.1.2011, 8:53
Сообщение #2


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Цитата(JuryS1806 @ 21.1.2011, 2:09) *
Note: If a delegate has been assigned to both a row and a column, the row delegate (i.e., this delegate) will take presedence and manage the intersecting cell index.
Тут опечатка в документации. Должно быть precedence. Т.е. если делегат был назначен как для строки так и для колонки, то приоритет будет иметь делегат строки, который будет управлять пересекающейся ячейкой.
Для конкретной ячейки делегат установить нельзя. У меня на такой случай есть "обобщенный делегат". Т.е. делегат который имеет множество представлений по редактированию. Я в Qt::UserRole выставляю тип делегата, и зависимости от этого типа, делегат ведет себя по разному, тем самым имитируя "делегат для яцейки"
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JuryS1806
  опции профиля:
сообщение 21.1.2011, 23:44
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 93
Регистрация: 21.10.2009
Из: Нижний Новгород
Пользователь №: 1168

Спасибо сказали: 9 раз(а)




Репутация:   0  


Спасибо за ответ. Я вот вчера к утру додумал к следующему:
нужно создавать делегат для конкретного колумна, например:

IntDelegate *IntVal = new IntDelegate(5);
и переписываю createEditor
if (index.column() == 5)
{
//создаю нужный делегат
}
else
{
//стандартный делегат
}

//также переписываю все остальные свойства делегата


я так понимаю, стандартным является QLineEdit.

Вообще, если честно я собрал для себя коллекцию разных делегатов, искал через инет, изобретал и как результат, имею все элементы управления MS Access 2007, календарики, чекбоксы, выпадающие таблицы, списки и т.д. и т.п.

И теперь работать одно удовольствие со своей моделью и делегатами!
Qt очень крутая система!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JuryS1806
  опции профиля:
сообщение 22.1.2011, 0:11
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 93
Регистрация: 21.10.2009
Из: Нижний Новгород
Пользователь №: 1168

Спасибо сказали: 9 раз(а)




Репутация:   0  


Нет, тоже не вариант. Если до этого какой-нибудь ячейке был назначен делегат, он перепишется новым.

Игорь, я так понял что нужно создать универсальный делегат для строки со всеми необходимыми вариантами???

Это очень много кода... А может быть все таки более простые и красивые решения ?

Прикрепил скриншот того что хочу воспроизвести, т.е. в каждой строки таблицы в зависимости от выбранного типа (столбец "Тип") меняются делегаты для "Умолч","Мин","Макс".

Спасибо за любое участие в решении проблемы

Сообщение отредактировал JuryS1806 - 22.1.2011, 0:16
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- JuryS1806   Делегат для конкретной ячейки в QTableView   21.1.2011, 2:09
- - igor_bogomolov   Цитата(JuryS1806 @ 21.1.2011, 2:09) Note:...   21.1.2011, 8:53
|- - JuryS1806   Спасибо за ответ. Я вот вчера к утру додумал к сле...   21.1.2011, 23:44
|- - JuryS1806   Нет, тоже не вариант. Если до этого какой-нибудь я...   22.1.2011, 0:11
- - igor_bogomolov   Можно конечно и так, каждый сам для себя решает, в...   22.1.2011, 0:10
- - igor_bogomolov   Цитата(JuryS1806 @ 22.1.2011, 0:11) Нет, ...   22.1.2011, 0:22
|- - JuryS1806   И на том спасибо. Просто боюсь костыли приделывать...   22.1.2011, 0:29
- - igor_bogomolov   Цитата(JuryS1806 @ 22.1.2011, 0:29) Прост...   22.1.2011, 0:36
|- - JuryS1806   Да. это и вправду лучшее решение сейчас. только до...   22.1.2011, 1:04
- - igor_bogomolov   Цитата(JuryS1806 @ 22.1.2011, 1:04) Я пра...   22.1.2011, 1:11
|- - JuryS1806   вот и простейший делегат от тролей: QSqlRelational...   22.1.2011, 1:21
- - igor_bogomolov   Цитата(JuryS1806 @ 22.1.2011, 1:21) Вообщ...   22.1.2011, 1:33
|- - JuryS1806   Вообщем, приблизительно сделал так: delegate.h : ...   30.1.2011, 17:07
|- - JuryS1806   Еще массу наработок сделал. Если кому нужно, пишит...   1.2.2011, 2:28
- - dragomir   Заранее извиняюсь. Надо срочно использовать описа...   20.11.2011, 22:03


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 18.1.2025, 2:33