Как сделать, чтобы делегат отображался постоянно |
Здравствуйте, гость ( Вход | Регистрация )
Как сделать, чтобы делегат отображался постоянно |
MishaUA |
7.1.2014, 4:49
Сообщение
#1
|
Участник Группа: Участник Сообщений: 185 Регистрация: 28.4.2013 Пользователь №: 3810 Спасибо сказали: 13 раз(а) Репутация: 0 |
Делегаты использую крайне редко. Сейчас нужно в QTableView отображать в первой колонке выбор времени, во второй дни недели (7 галочек), в последней - еще одна галочка.
Вот часть кода:
Проблема в том, что редактор (QTimeEdit, DeviceInkDialogTimeTableDelegateDaysBoxes и QcheckBox) отображается только после двойного клика по ячейке. Собственно, интересует, как сделать так, чтобы он отображался постоянно? |
|
|
MishaUA |
8.1.2014, 2:23
Сообщение
#2
|
Участник Группа: Участник Сообщений: 185 Регистрация: 28.4.2013 Пользователь №: 3810 Спасибо сказали: 13 раз(а) Репутация: 0 |
почти решил проблему добавлениев м paint такого кода:
Но появилась новая проблема - в режиме редактирования (при клике на ячейке) доолжен появляться виджет с 7 чек-боксами, он появляется, но не правильного размера и смещен вверх, из-за чего получается такая фигня: Как пожно установить виджет на нужное место? И можно ли как то сделать так, чтобы делегат скрывался при редактировании? |
|
|
Litkevich Yuriy |
8.1.2014, 14:26
Сообщение
#3
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
У тебя в терминах каша, вот ты и буксуешь.
Делегат не может не отображаться постоянно, делегат не может скрываться при редактировании. Делегат рисует содержимое элемента представления, а для редактирования он создаёт и показывает виджет-редактор. Отсюда: 1) Делегат отображается всегда; 2) делегат не скрывается при редактировании, а просто показывает поверх себя виджет-редактор. Для отображения в методе делегата paint() эксплуатируй: drawControl, QStyle::CE_CheckBox, QStyleOptionViewItem а не виджет-редактор (он ещё и не создан, создаётся автоматически когда пользователь собирается редактировать данные). Делай по аналогии с этим: CheckBoxDelegate.h
CheckBoxDelegate.cpp
П.С. Не забывай длинный код оборачивать в тэг expand (кнопка рядом с кнопкой code) |
|
|
MishaUA |
9.1.2014, 1:34
Сообщение
#4
|
Участник Группа: Участник Сообщений: 185 Регистрация: 28.4.2013 Пользователь №: 3810 Спасибо сказали: 13 раз(а) Репутация: 0 |
тоесть, редактор у меня правильно сделан? осталось отлько по человечески сделать отображение?
|
|
|
Litkevich Yuriy |
9.1.2014, 2:47
Сообщение
#5
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
тебе редактор как таковой может и не нужен (см. приведённый мною пример), всю работу по смене состояний и обновлении модели можно делать в обработчике события editorEvent
П.С. Можно было не делать столь длинных имён: DeviceInkDialogTimeTable_COLLUMN__TIME достаточно было "спрятать" их внутри класса: Ну а в коде делегата использовать: За пределами же делегата, использовать с указанием класса:
|
|
|
Текстовая версия | Сейчас: 19.4.2024, 11:01 |