Имам QGraphicsItem
на сцената. hoverEnterEvent
се внедрява отново за този елемент. Това е кодът от hoverEnterEvent
:
grabber = new agnt::A_CornerGrabber(A_CornerGrabber::TOP_RIGHT,this,8,3);
assert(grabber);
grabber->installSceneEventFilter(this);
update(boundingRect());
A_CornerGrabber
е клас, наследен от QGraphicsRectItem
. Идеята е, когато задържите курсора на мишката върху елемент, се появява грабер, така че можете да го плъзнете, за да промените размера на основния елемент.
Работи добре, докато не превъртя graphicsview, така че първият елемент да не е цял в изгледа. И след като това hoverEnterEvent все още се извиква, grabber ctor все още се извиква, но методът grabber->paint()
вече не се извиква. Ето го grabber->paint()
:
painter->setPen(Qt::NoPen);
QRectF pRect = parent->boundingRect();
painter->drawRect(rect());
setPos(pRect.bottomRight().x()-size-adjust,pRect.bottomRight().y()-size-adjust);
Защо така?
P.S. Всичко работеше добре преди известно време, преди да направя някои промени в моя код. За съжаление не мога да възстановя стар код и не мога да разбера какво точно е развалило grabber->paint()
.
РЕДАКТИРАНЕ: добавен sceneEventFilter()
if(event->type()== 155)
{
QGraphicsSceneMouseEvent* me = dynamic_cast<QGraphicsSceneMouseEvent*>(event);
if(!me) return true;
if(rect().adjusted(0,0,me->pos().x()-me->lastPos().x(),0).width()>xStep)
{
prepareGeometryChange();
int relX = me->pos().x() - xOffset;
int newRelX = me->lastPos().x() - xOffset;
int steps = relX/xStep;
int newSteps = newRelX/xStep;
setWidth(getWidth()+xStep*(steps-newSteps));
setInitialTime(QString::number(getTime().toInt()+(steps - newSteps) ) );// my func
}
}
if(event->type()== 187)
{
dynamic_cast<agnt::A_GntGV*>(scene()->views().at(0))->timeChanged(getT(),getId());
//my func, has nothing to do with painting
}
if(event->type()==160||event->type()==162)
return false;
return true;
РЕДАКТИРАНЕ 2: Мисля, че sceneEventFilter() дори няма значение. Проблемът продължава, ако коментирам
//grabber->installSceneEventFilter(this);
eventFilter
, която сте инсталирали на грабера? - person alexisdm   schedule 20.09.2012