Название: События в делегате Отправлено: GNU Dimarik от Ноябрь 30, 2009, 20:55 Всем привет.
Ломаю голову над тем,как обработать событие клика мышью на делегате. Задача такая: Есть наследник QTreeView который отображает модель ростера xmpp,на тайле есть кнопочка ткнув на которую тайл дожен открыться\закрыться.Как определить область на которую кликнул юзер? (https://url.odesk.com/cdqop) Вот картинка https://url.odesk.com/cdqop (https://url.odesk.com/cdqop) Помогите ПЛЗ!!!!!! Название: Re: События в делегате Отправлено: lit-uriy от Ноябрь 30, 2009, 21:09 что такое "тайл" не знаю, но у события мышки можно спросить координаты курсора, а их сопоставить с элементом представления (стало быть с делегатом)
Название: Re: События в делегате Отправлено: GNU Dimarik от Ноябрь 30, 2009, 21:15 Я дал ссылку на картинку где нарисован тайл с кнопкой.Дело в том,что я рисую виджет на пиксмапе,а потом рисую пиксмап в QItemDelegate::paint
Код: void CRosterDelegate::paint(QPainter *painter,const QStyleOptionViewItem &option,const QModelIndex &index) const Таким образом когда происходит клик,я ловлю событие само собой,но уже не могу поймать позицию кнопки,для того,что бы она была правильной виджет нужно показать,явно вызвать QWidget::show(),что невозможно,он мелькает.Я пробовал его двигать и делать рпозрачным,все равно заметно. Понятно,что проблема решиться,если я все нарисую ручками,но не хотелось бы. Вот ссылка погляди https://url.odesk.com/cdqop (https://url.odesk.com/cdqop) Название: Re: События в делегате Отправлено: GNU Dimarik от Ноябрь 30, 2009, 21:17 Забыл сказать виджет я сделал в дизайнере,в общем то линивый дважды делает :( ... ,но если знаешь способ подскажи плз
Название: Re: События в делегате Отправлено: GNU Dimarik от Ноябрь 30, 2009, 21:33 Видимо придется мне рендерить все ручками
В любом случае lit-uriy спасибо за внимание :) Название: Re: События в делегате Отправлено: crossly от Декабрь 02, 2009, 17:14 а если просто переопределить event(QEvent *) у делегата.... или я чего то не понимаю ??
Название: Re: События в делегате Отправлено: GNU Dimarik от Декабрь 02, 2009, 17:42 Координаты я получаю переопределяя QTreeView::mousePressEvent(QMouseEvent *event).Дело в том,что я не могу потом получить координаты нужной области на виджете,потому,что для этого нужно его показать (QWidget::show()).
Решение нешел,я ручками рисую и сохраняю отрисованные области внутри делегата в объектах QRect. Дальше получая координаты клика буду проверять входит ли точка клика в нужную область. Тут возник вопрос,мне нужно выкидывать ТулТипы при наведении на те или иные части тайла,я переопределил QAbstractItemDelegate::helpEvent,вернул true,но не понимаю как технически отобразить тул тип,нарисовать? или отправить событие представлению? Всем спасибо. |