Название: Что происходит с boundingRect() и как он связан с hoverEvent() ? Отправлено: Hrundel от Август 24, 2016, 13:33 Всем привет,
странная проблема - когда пытаюсь создать boundingRect динамически или получить разчитаный через QPainterPath - hoverEvent работает криво. Если кодирую жестко - работает правильно. Как я вижу перерисовка происходит в правильных границах. Но на границы hoverEvent влияет то, как опеределен boundingRect. Если boundingRect прописан хардом, то и hoverEvent работает в правильных границах, если boundingRect прописан динамически то hoverEvent кривой! Вот например динамический boundingRect который не работает: Код
Хард код делает все правильно: Код
Спасибо Название: Re: Что происходит с boundingRect() и как он связан с hoverEvent() ? Отправлено: GreatSnake от Август 24, 2016, 14:34 А разве не возник вопрос типа "А нафига я вызываю QPainterPath::controlPointRect() аж 4 раза?" ???
И чем не устроил QPainterPath::boundingRect() ? Название: Re: Что происходит с boundingRect() и как он связан с hoverEvent() ? Отправлено: Hrundel от Август 24, 2016, 14:38 да это только для примера. чтобы понятно было что он возвращает. В реале то оно конечно так выглядит:
Код
QPainterPath::boundingRect() тоже прекрасно устраивает, но дает тот же результат. hoverEvent работает в неправильных границах. Название: Re: Что происходит с boundingRect() и как он связан с hoverEvent() ? Отправлено: GreatSnake от Август 24, 2016, 14:42 Для hover-a нужно перегружать QGraphicsItem::shape():
Код
Название: Re: Что происходит с boundingRect() и как он связан с hoverEvent() ? Отправлено: Hrundel от Август 24, 2016, 14:43 Перегружен
Код
Название: Re: Что происходит с boundingRect() и как он связан с hoverEvent() ? Отправлено: Old от Август 24, 2016, 14:54 Почитайте в документации в каких системах координат вы должный возвращать значения. Скорее всего shape работает в системе координат итема, а boundingRect должен возвращаться в системе координат parentа.
Название: Re: Что происходит с boundingRect() и как он связан с hoverEvent() ? Отправлено: Hrundel от Август 24, 2016, 15:11 Координаты совпадают по причине того, что оба объекта находятся в нулевой позиции. Поэтому даже при несовпадении систем координат должно бы работать, так как у них одинаковые значения.
Но даже не зависимо от этого - если я помещаю те же самые динамические знаечения вручную - то все работает, а если передаю - то не работает. Попробовал мапить - тот же эффект. Название: Re: Что происходит с boundingRect() и как он связан с hoverEvent() ? Отправлено: Old от Август 24, 2016, 16:19 А покажите как и где у вас формируется этот painterPath_.
Что-то в памяти у меня всплывает, что boundingRect должен быть фиксирован, а shape должна вписываться в него, а не наоборот. Причем, изменить значение boundingRect просто так нельзя, нужно обязательно уведомить сцену, что-бы она свои кеши подтерла. Название: Re: Что происходит с boundingRect() и как он связан с hoverEvent() ? Отправлено: Hrundel от Август 24, 2016, 18:24 А у меня наоборот. Попробую переделать.
|