Как в ячейке таблице отображать виджет ?, QItemDelegate |
Здравствуйте, гость ( Вход | Регистрация )
Как в ячейке таблице отображать виджет ?, QItemDelegate |
flankerr |
19.10.2009, 12:53
Сообщение
#1
|
Активный участник Группа: Участник Сообщений: 356 Регистрация: 9.1.2008 Пользователь №: 65 Спасибо сказали: 2 раз(а) Репутация: 0 |
Есть таблица. Надо в ячках вместо стандартной текстовой строки отображать виджет.
На сколько я понимаю тут нужен QItemDelegate. Как подсунуть виджет при редактировании примеров полно. Как отрисовать ячейку с нуля тоже понятно. А вот как в ячейку в режиме отображения (не редактирования) подсунуть виджет ? И главное чтобы с этим виджетом можно было работать, ну всмысле он был не просто тупо картинкой а полностью рабочим, т.е реагировал на действия пользователя ?? Сообщение отредактировал flankerr - 19.10.2009, 12:53 |
|
|
SABROG |
19.10.2009, 14:36
Сообщение
#2
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
void QAbstractItemView::openPersistentEditor ( const QModelIndex & index )
|
|
|
rnd |
19.10.2009, 15:17
Сообщение
#3
|
Студент Группа: Участник Сообщений: 54 Регистрация: 22.7.2009 Пользователь №: 930 Спасибо сказали: 1 раз(а) Репутация: 0 |
Может быть еще QAbstractItemView::setIndexWidget
|
|
|
Vass |
19.10.2009, 16:30
Сообщение
#4
|
Студент Группа: Участник Сообщений: 46 Регистрация: 17.3.2009 Из: Россия, Рыбинск Пользователь №: 617 Спасибо сказали: 8 раз(а) Репутация: 0 |
Вот это я вызываю в конструкторе класса наследуемого от QTreeView в своем проекте
Вот так выглядит заголовок делегата
Вот так выглядит его реализация:
Вот так оно вызывается из модели (в переопределенной виртуальной ф-ции)
Результатом является вполне функциональный прогрессбар в ячейке (у меня он отображает процент загрузки файла в дайнлоад менеджере) |
|
|
SABROG |
19.10.2009, 17:52
Сообщение
#5
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
QWidget *ProgressBarDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &/*option */, const QModelIndex &/*index */) const { QProgressBar *progressBar = new QProgressBar(parent); return progressBar; } QApplication::style()->drawControl(QStyle::CE_ProgressBar, &progressBarOption, painter); Похоже на масло маслянное. Когда ячейка не редактируется, то paintEvent рисует progressBar, кода редактируется (чтО можно редактировать в ячейке, задача которой всего-лишь отображать прогресс?), то поверх нарисованного прогресса создается уже настоящий QProgressBar. Т.е. по сути, в момент редактирования ячейки их 2 должно получиться. |
|
|
Litkevich Yuriy |
19.10.2009, 20:13
Сообщение
#6
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
SABROG |
19.10.2009, 21:06
Сообщение
#7
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Т.е. по сути, в момент редактирования ячейки их 2 должно получиться. в каждый момент один. По моему такДумаю ты прав. Но двойная работу все же присутствует. Остается только понять насколько сильно будет грузить приложение таблица с сотней открытых editoro'в. |
|
|
Litkevich Yuriy |
19.10.2009, 23:23
Сообщение
#8
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Остается только понять насколько сильно будет грузить приложение таблица с сотней открытых editoro'в. можно посмотреть на моём примерчике (когда-то выкладывал). Вот его поправленный вариант.
Qt_test_7.zip ( 5.41 килобайт )
Кол-во скачиваний: 251собственно собирайте make debug и в консоли увидите какие методы делегата вызываются. Делегаты проверяйте в первых двух строчках. Обратите внимание на вторую строку первого столбца (с редактором даты) во время редактирования. Когда курсор мигает, всё время перерисовывается (вроде логично, но я не ожидал ) |
|
|
Vass |
20.10.2009, 1:14
Сообщение
#9
|
Студент Группа: Участник Сообщений: 46 Регистрация: 17.3.2009 Из: Россия, Рыбинск Пользователь №: 617 Спасибо сказали: 8 раз(а) Репутация: 0 |
SABROG, Да, признаюсь перестарался
|
|
|
Текстовая версия | Сейчас: 29.3.2024, 18:30 |