Табличное представление с виджетами, которое по функциональности мало отличалось бы от GridLayout |
Здравствуйте, гость ( Вход | Регистрация )
Табличное представление с виджетами, которое по функциональности мало отличалось бы от GridLayout |
Vorchun |
8.2.2011, 15:56
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 6 Регистрация: 26.8.2010 Пользователь №: 1981 Спасибо сказали: 0 раз(а) Репутация: 0 |
Задача: Создать на базе модель представления таблицу из виджетов, таким образом чтоб она по функциональности не отличалась от виджетов помещенных в gridlayout
Частичное решение Существует контейнер в котором хранится List из CalendarI Существует модель ( прослойка между представлением и контейнером) умеющая через data() возвращать CalendarI Существует виджет CalendarIW который умеет отображать CalendarI ( setItem() ) - у меня это виджет с кнопочками Я сделал следующий делегат (немного криво, но в целом вполне функционально ):
коротко - этот делегат отрисовывает как нужно ячейку, когда она не редактируется, а когда она редактируется - он создает виджет, который обеспечивает необходимый функционал. bool CalendarD::eventFilter( QObject *qoEditor , QEvent *qeEvent ) - обеспечивает выход из виджета, когда мышь покидает область редактирования Открывать ячейку на редактирование планировалось из представления следующим образом
При таком подходе - юзер водит мышью по вьюву тыкает на кнопочки в виджетах - и вообще не догадывается что перед ним не Gridlayout. Это работает при медленном движении мыши. Все было бы хорошо если бы не одно НО - при быстром движении мыши возникает следующая ситуация: 1) мышь пролетает по первой ячейке - создается первая ячейка 2) мышь продолжает лететь - пока первая ячейка еще не создалась или еще хз почему - но мышь уже покинула эту ячейку - соответственно виджет редактора из делегата не получил событие QEvent::Leave приведшее к его уничтожению, те первая ячейка продолжает редактироваться 3) поскольку первая ячейка еще редактируется - все остальные ячейки не открываются на редактирование... Вот! Была идея, что надо отлавливать mousePressEvent() - открывать ячейку на редактирование, а потом повторно создавать событие нажатие мыши, чтоб его отловил уже открытый виджет - но как это сделать я не в курсе... Есть ли у кого какие либо идеи еще? |
|
|
Алексей1153 |
8.2.2011, 19:18
Сообщение
#2
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
|
|
|
abc |
18.2.2011, 22:16
Сообщение
#3
|
Участник Группа: Участник Сообщений: 221 Регистрация: 16.12.2010 Из: СПб Пользователь №: 2272 Спасибо сказали: 26 раз(а) Репутация: 4 |
событие можно так создать:
QCoreApplication::sendEvent в остальное я не вник) |
|
|
Текстовая версия | Сейчас: 27.12.2024, 5:17 |