Название: Сложный виждет в качестве делегата. Отправлено: Barmaglodd от Март 02, 2010, 13:16 Есть сложный виджет с несколькими полями ввода и чем-то типа слайдера. Надо его использовать в качестве редактора в делегате. Необходимо, чтобы даже неактивная ячейка выглядела как этот виждет.
Отсюда 2 проблемы: 1. Как написать делегат, чтобы он корректно отображал неактивную ячейку? Сейчас вижу только мега костыль: создавать в методе paint делегата виджет, заполнять его руками и отрисовывать его копию. Причём ещё как-то надо обрабатывать изменение данных модели. 2. Даже выставив QAbstractItemView::AllEditTriggers, первый MousePressEvent съедается ItemView для перехода в режим редактирования. Например, не получится просто ткнуть в неактивную ячейку со слайдером и потянуть его, не отпуская левой кнопки мыши. Название: Re: Сложный виждет в качестве делегата. Отправлено: Павел_F. от Март 02, 2010, 13:34 У делегата есть virtual bool editorEvent ( QEvent * event, QAbstractItemModel * model, const QStyleOptionViewItem & option, const QModelIndex & index ) там и нужно обрабатывать события.
Советую посмотреть на пример (Путь до Qt)/examples/itemviews/stardelegate Там то что вам нужно. Есть, из той же серии (Путь до Qt)/demos/books. Там делегаты которых всегда видно и с обработкой событий. Название: Re: Сложный виждет в качестве делегата. Отправлено: Barmaglodd от Март 02, 2010, 13:37 Ага, а потом посмотреть на входные параметры этого метода и понять, что виджета там нет. Как я ему перешлю событие?
Название: Re: Сложный виждет в качестве делегата. Отправлено: Barmaglodd от Март 02, 2010, 13:40 И StarDelegate страдает от той же болезни съедания первого события.
Название: Re: Сложный виждет в качестве делегата. Отправлено: Павел_F. от Март 02, 2010, 13:48 В код не вчитывался но books реагирует на 1-е событие нормально. Нажал мышью, звездочек прибавилось.
stardelegate по первому клику меняет выбранный элемент, если тыкать в уже выделенную строку то реагирует на первое событие. А виджета там и не надо. Забудьте про stardelegate там editorEvent как раз и не используется. Смотрите на books. Название: Re: Сложный виждет в качестве делегата. Отправлено: Barmaglodd от Март 02, 2010, 14:07 В books в модель пишется, мне же надо именно событие передать. Попробуйте в books кликнуть по неактивной ячейке со звёздочками и, не отпуская левой кнопки мыши, подвигать мышь. Звёздочки не побегут за курсором, до них события не доходят.
Название: Re: Сложный виждет в качестве делегата. Отправлено: Barmaglodd от Март 02, 2010, 14:24 Как оказалось editorEvent вызывается ещё до createEditor. Видимо, моя таблица плавно превращается в GridLayout.
Название: Re: Сложный виждет в качестве делегата. Отправлено: Павел_F. от Март 02, 2010, 14:36 Попробуйте в books кликнуть по неактивной ячейке со звёздочками и, не отпуская левой кнопки мыши, подвигать мышь. Звёздочки не побегут за курсором, до них события не доходят. В код books заглянитеКод с чего бы им на QEvent::MouseMove реагировать-то? реакция только на QEvent::MouseButtonPress написана, остальные лесом. Название: Re: Сложный виждет в качестве делегата. Отправлено: Павел_F. от Март 02, 2010, 14:46 А уж есть виджет или нет, найти его если надо это не проблема. Поставить флаг в createEditor, запомнить указатель на виджет, у closeEditor флаг убрать... Ну тут полно вариантов. Главное вам пришло то, что случилось, что нужно сообщить виджету.
Название: Re: Сложный виждет в качестве делегата. Отправлено: SABROG от Март 02, 2010, 20:15 openPersistentEditor() не подходит? Или вызов слота edit() по клику мышки?
Название: Re: Сложный виждет в качестве делегата. Отправлено: Barmaglodd от Март 03, 2010, 12:37 openPersistentEditor() самое оно. Огромное спасибо!!!!!
|